Question

Je dois appeler un fichier VBScript (extension de fichier .vbs) dans mon application C # Windows . 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 cela?

Était-ce utile?

La solution

Le code suivant exécutera un script VBScript sans invites ni erreurs ni logo shell.

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

Une technique plus complexe consisterait à 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 Hôte de script Windows si vous souhaitez que Windows, etc. soit affiché par le programme de script. Vous pouvez également essayer d’exécuter cscript directement, mais sur certains systèmes, il lancera simplement l’éditeur:)

Autres conseils

Une autre approche consiste à créer un projet de bibliothèque de classes VB.NET, à copier votre code VBScript dans un fichier de classes VB.NET et à référencer la bibliothèque de classes VB.NET à partir de votre programme C #.

Vous devrez corriger toute différence entre VBScript et VB.NET (cela devrait être peu).

L'avantage ici est que vous exécuterez le code en cours de traitement.

Ceci est un problème d'autorisations. Votre application appPool doit s'exécuter au niveau d'autorisation le plus élevé pour pouvoir le 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 exécuter un autre programme à partir de 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");

Au profit des chercheurs, j'ai trouvé ceci post , ce qui donne une réponse claire (surtout si vous avez des paramètres). Je l'ai testé et semble fonctionner correctement.

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top