J'ai besoin d'appeler un fichier VBScript (extension de fichier .vbs) dans mon application Windows C #. Comment puis-je faire ceci?
Il existe un complément pour accéder à un fichier VBScript dans Visual Studio. Mais je dois accéder au script dans le code derrière. Comment faire ça?
Le code suivant exécutera un script VBScript sans invites ni erreurs et sans logo Shell.
System.Diagnostics.Process.Start(@"cscript //B //Nologo c:\scripts\vbscript.vbs");
Une technique plus complexe serait d'utiliser:
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'utilisation des propriétés StartInfo
vous donnera un accès assez granulaire aux paramètres du processus.
Vous devez utiliser Windows Script Host si vous voulez que Windows, etc. soit affiché par le programme de script. Vous pouvez également essayer d'exécuter directement cscript
directement, mais sur certains systèmes, cela ne fera que lancer l'éditeur :)
Une autre approche consiste à créer un projet de bibliothèque de classes VB.NET, à copier votre code VBScript dans un fichier de classe VB.NET et à référencer la bibliothèque de classes VB.NET à partir de votre programme C #.
Vous devrez corriger toutes les différences entre VBScript et VB.NET (devrait être peu).
L'avantage ici, c'est que vous exécuterez le code en cours.
Il s'agit d'un problème d'autorisations. Votre application appPool doit être exécutée au niveau d'autorisation le plus élevé pour ce faire en 2008. L'identité doit être Administrateur.
Vous voulez dire que vous essayez d'exécuter un fichier vbs à partir de C #?
Cela peut être fait comme en exécutant tout autre programme à partir du code C # :
Process.Start(path);
Mais vous devez vous assurer qu'il ne demandera rien et qu'il fonctionne avec la version en ligne de commande de l'interpréteur:
Process.Start("cscript path\\to\\script.vbs");
Pour le bénéfice des chercheurs, j'ai trouvé ceci post , qui donne une réponse claire (surtout si vous avez des paramètres). Je l'ai testé - semble bien fonctionner.
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);