Comment appeler un fichier VBScript dans une application C#?

j'ai besoin d'appeler un VBScript fichier (.extension de fichier vbs) dans mon application C# Windows. Comment puis-je faire cela?

il y a un add-in pour accéder à un fichier VBScript dans Visual Studio. Mais j'ai besoin d'accéder au script en code derrière. Comment faire cela?

33
demandé sur Peter Mortensen 2008-10-14 12:49:28

5 réponses

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

StartInfo propriétés de vous donner accès granulaire aux paramètres du processus.

Vous devez utiliser Windows Script Host si vous voulez windows, etc. à être affiché par le programme script. Vous pouvez également essayer de l'exécution d' cscript directement, mais sur certains systèmes il suffit de lancer l'éditeur :)

59
répondu Ilya Kochetov 2014-04-15 01:24:37

une autre approche consiste à créer un VB.NET projet de bibliothèque de classe, copiez votre code VBScript dans un VB.NET Class file, and reference the VB.NET bibliothèque de classe de votre programme C#.

vous aurez besoin de corriger toute différence entre VBScript et VB.NET (devrait être peu).

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

4
répondu condiosluzverde 2011-06-07 14:55:12

C'est un problème d'autorisations. Votre application appPool doit être en cours d'exécution au plus haut niveau d'autorisation pour le faire en 2008. L'Identité doit être Administrateur.

3
répondu Will 2012-02-28 16:35:39

vous voulez dire que Vous essayez d'exécuter un fichier vbs à partir de C#?

C'est peut-être fait comme lancer tout autre programme à partir du code C#:

Process.Start(path);

mais vous devez vous assurer qu'il ne demandera rien, et il fonctionne avec la version en ligne de commande de l'interpréteur:

Process.Start("cscript path\to\script.vbs");
2
répondu Biri 2008-10-14 08:56:46

Pour le bénéfice des chercheurs, j'ai trouvé ce post, qui donne une réponse claire (esp si vous avez des paramètres). Avons testé il 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);
1
répondu HockeyJ 2016-09-27 10:10:37