Wie eine VBScript-Datei in einer C # .NET-Anwendung nennen?
Frage
Ich brauche eine VBScript -Datei (VBS-Datei-Erweiterung) in meinem C # Windows-Anwendung aufzurufen . Wie kann ich das machen?
Es ist ein Add-in eine VBScript-Datei zugreifen in Visual Studio. Aber ich muß hinter dem Skript im Code zuzugreifen. Wie man dies tut?
Lösung
Der folgende Code wird einen VBScript-Skript ohne Eingabeaufforderungen oder Fehler und kein Shell-Logo auszuführen.
System.Diagnostics.Process.Start(@"cscript //B //Nologo c:\scripts\vbscript.vbs");
Eine komplexere Technik wäre zu verwenden:
Process scriptProc = new Process();
scriptProc.StartInfo.FileName = @"cscript";
scriptProc.StartInfo.WorkingDirectory = @"c:\scripts\"; //<---very important
scriptProc.StartInfo.Arguments ="//B //Nologo vbscript.vbs";
scriptProc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; //prevent console window from popping up
scriptProc.Start();
scriptProc.WaitForExit(); // <-- Optional if you want program running until your script exit
scriptProc.Close();
die StartInfo
Eigenschaften können Ihnen Zeit ziemlich granularen Zugriff auf die Prozesseinstellungen geben.
Sie müssen Windows Script Host verwenden , wenn Sie Windows möchten, usw. durch angezeigt werden das Skript Programm. Sie können auch nur die Ausführung cscript
direkt versuchen, aber auf manchen Systemen wird es nur um den Editor zu starten:)
Andere Tipps
Ein weiterer Ansatz ist es, ein VB.NET-Klassenbibliothek-Projekt zu erstellen, kopieren Sie die VBScript-Code in eine VB.NET-Klasse-Datei, und verweist auf die VB.NET-Klassenbibliothek von C # -Programm.
Sie müssen fix-up keine Unterschiede zwischen VBScript und VB.NET (sollte wenige sein).
Der Vorteil hierbei ist, dass Sie den Code in-Prozess ausgeführt werden.
Dies ist ein Problem mit den Berechtigungen. Ihre Anwendung AppPool muss auf dem höchsten Berechtigungsstufe ausgeführt werden, dies zu tun im Jahr 2008. Die Identität Administrator sein muss.
Sie meinen, Sie versuchen, eine vbs-Datei von C # laufen?
Es kann wie jedes andere Programm von C # -Code ausgeführt wird:
Process.Start(path);
Aber Sie müssen sicherstellen, dass es nicht um etwas bitten wird, und es wird mit der Kommandozeilen-Version des Interpreters ausgeführt werden:
Process.Start("cscript path\\to\\script.vbs");
Zum Nutzen der Forscher, fand ich diese post , die eine klare Antwort gibt (vor allem, wenn Sie Parameter haben). Habe es getestet -. Scheint gut zu funktionieren
string scriptName = "myScript.vbs"; // full path to script
int abc = 2;
string name = "Serrgggio";
ProcessStartInfo ps = new ProcessStartInfo();
ps.FileName = "cscript.exe";
ps.Arguments = string.Format("\"{0}\" \"{1}\" \"{2}\"", scriptName, abc, name);
//This will equate to running via the command line:
// > cscript.exe "myScript.vbs" "2" "Serrgggio"
Process.Start(ps);