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?

War es hilfreich?

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top