Domanda

Devo chiamare un VBScript (estensione file .vbs) nella mia applicazione Windows C # . Come posso fare questo?

Esiste un componente aggiuntivo per accedere a un file VBScript in Visual Studio. Ma devo accedere allo script nel codice dietro. Come fare questo?

È stato utile?

Soluzione

Il codice seguente eseguirà uno script VBScript senza prompt o errori e senza logo della shell.

System.Diagnostics.Process.Start(@"cscript //B //Nologo c:\scripts\vbscript.vbs");

Una tecnica più complessa sarebbe usare:

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();

L'uso delle proprietà StartInfo ti darà un accesso abbastanza granulare alle impostazioni del processo.

Devi utilizzare Windows Script Host se vuoi che Windows, ecc. sia visualizzato da il programma di script. Potresti anche provare a eseguire direttamente cscript ma su alcuni sistemi avvierà semplicemente l'editor :)

Altri suggerimenti

Un altro approccio è quello di creare un progetto Libreria di classi VB.NET, copiare il codice VBScript in un file di classe VB.NET e fare riferimento alla Libreria di classi VB.NET dal programma C #.

Dovrai correggere eventuali differenze tra VBScript e VB.NET (dovrebbero essere poche).

Il vantaggio qui è che eseguirai il codice in-process.

Questo è un problema di autorizzazioni. La tua appPool dell'applicazione deve essere in esecuzione al massimo livello di autorizzazione per farlo nel 2008. L'identità deve essere Amministratore.

Intendi provare a eseguire un file vbs da C #?

Può essere fatto come eseguendo qualsiasi altro programma dal codice C # :

Process.Start(path);

Ma devi assicurarti che non ti chieda nulla, ed è in esecuzione con la versione da riga di comando dell'interprete:

Process.Start("cscript path\\to\\script.vbs");

A beneficio dei ricercatori, ho trovato questo post , che fornisce una risposta chiara (specialmente se si hanno parametri). L'ho provato - sembra funzionare bene.

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top