WiesneRobert Geschrieben 29. Mai 2008 Geschrieben 29. Mai 2008 Hallo Community Ich versuche von einem .NET Programm ein VBScript zu starten. Soweit kein Problem, jedoch bekomme ich nicht mit wenn der Prozess beendet ist. Das Script läuft durch, jedoch bleibt der Prozess cscript.exe hängen.[ using System.Diagnostics; ProcessStartInfo psi = new ProcessStartInfo("cscript.exe"); Process process = new Process(); psi.UseShellExecute = false; psi.Arguments ="script.vbs" process.StartInfo = psi; try { if (process.Start()) //Prozess starten { if (process.WaitForExit(60000)) //60 Sekunden warten { //Prozess wurde in der Zeitspanne beendet } else { //Prozess läuft noch } } Ich fliege immer in die Else, obowohl das vbscript komplett durchgelaufen ist, bleibt der prozess cscript.exe im Task-Manager bestehen und wird nicht beendet.
WiesneRobert Geschrieben 30. Mai 2008 Autor Geschrieben 30. Mai 2008 naja, habs mittlerweile selber herausgefunden ein WScript.Quit() am ende der VBscript hat geholfen.
hubibi Geschrieben 1. Juni 2008 Geschrieben 1. Juni 2008 Hallo WiesneRobert, ich würde dir empfehlen nicht das Script über einen extra Prozess aufzurufen, sondern das WScript ActiveX Objekt in deine Anwendung einzubinden! Einfach "Add Reference -> COM -> WScript", dann hast du eine Objekt in deiner Anwendung, mit dem wesentlich mehr Kontrolle über deine Scripts hast! mfg Hubibi
WiesneRobert Geschrieben 3. Juni 2008 Autor Geschrieben 3. Juni 2008 Danke, wird morgen direkt mal getestet.
WiesneRobert Geschrieben 4. Juni 2008 Autor Geschrieben 4. Juni 2008 Muss mir leider selber antworten Habe das Microsoft MSScriptControl (ActiveX) Object eingebunden, jedoch glaube ich nicht, dass es für meinen Zweck geeignet ist. Ich habe versucht ein bestehendes Script einzulesen und über AddCode hinzuzufügen: MSScriptControl.ScriptControl x = new MSScriptControl.ScriptControl(); x.Language = "vbscript"; String scr ="hello.vbs"; try { using (StreamReader sr = new StreamReader(scr)) { x.AddCode(sr.ReadToEnd()); } } catch (Exception e) { Console.WriteLine(e.Message); } Das Programm fliegt mit der Exception: Variable is undefined: 'Wscript' bei ScriptControl.ScriptControlClass.AddCode(String Code) raus. Das Script hello.vbs besteht lediglich aus der Zeile WScript.Echo "Hello world" Wie kann ich erreichen, dass WScript bekannt ist?
hubibi Geschrieben 5. Juni 2008 Geschrieben 5. Juni 2008 Gar nicht! Das "WScript" Objekt wird von der wscript.exe erzeugt! Nutze doch statt WScript.Echo ein MsgBox, oder bastle dir dein eigenes COM-Objekt mit Hilfsfunktion und füge es über "AddObject" hinzu! mfg Hubibi
WiesneRobert Geschrieben 5. Juni 2008 Autor Geschrieben 5. Juni 2008 Habe mir die Möglichkeiten über MSScriptControl & AddObject mal angesehen. Das ganze ist für meine Vorhaben leider nicht praktikabel. Letztendlich soll jedes VBScript (sofern es fehlerfrei ist) ausgeführt werden können, ohne vorher zu wissen was oder wie es etwas macht.
hubibi Geschrieben 6. Juni 2008 Geschrieben 6. Juni 2008 Naja wenn es dir wirklich nur um das Ausführen reiner Benutzerscripte geht, kannst du das ruhig mit einem extra Prozess machen! Das MSScriptControl solltest du aber immer dann verwenden wenn du Kontroll über das Script haben willst. Ich habe z.B. eine Anwendung in der der Benutzer ein beliebiges Script ausführen kann, diesem Script gebe ich vorher mit AddObject ein Objekt mit, aus welchem ich dann im nachhinein den Rückgabewert des Scriptes auslese! mfg
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden