Como chamar um arquivo VBScript em um aplicativo c #?

Eu preciso chamar um arquivo VBScript (extensão de arquivo .vbs) no meu aplicativo do Windows c #. Como posso fazer isso?

Há um suplemento para acessar um arquivo VBScript no Visual Studio. Mas preciso acessar o script no código por trás. Como fazer isso?

O código a seguir executará um script VBScript sem prompts ou erros e sem logotipo do shell.

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

Uma técnica mais complexa seria usar:

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

Usando as propriedades StartInfo , você terá access bastante granular às configurações do processo.

Você precisa usar o Windows Script Host se quiser que o Windows, etc. seja exibido pelo programa de script. Você também pode tentar apenas executar o cscript diretamente, mas em alguns sistemas ele apenas iniciará o editor 🙂

Outra abordagem é criar um projeto VB.NET Class Library, copiar seu código VBScript em um arquivo de class VB.NET e referenciar a biblioteca de classs VB.NET de seu programa C #.

Você precisará corrigir quaisquer diferenças entre VBScript e VB.NET (devem ser poucas).

A vantagem aqui é que você executará o código em processo.

Este é um problema de permissions. O aplicativo appPool deve estar em execução no nível de permissão mais alto para fazer isso em 2008. A identidade deve ser Administrador.

Quer dizer que você tenta executar um arquivo vbs de c #?

Pode ser feito como rodar qualquer outro programa a partir do código C # :

 Process.Start(path); 

Mas você precisa ter certeza de que não vai pedir nada e está sendo executado com a versão de linha de comando do interpretador:

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

Para o benefício dos pesquisadores, encontrei este post , que dá uma resposta clara (especialmente se você tiver parâmetros). Ter testado – parece funcionar bem.

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