web-dev-qa-db-ja.com

C#アプリケーションでVBScriptファイルを呼び出す方法は?

C#Windowsアプリケーションで VBScript ファイル(.vbsファイル拡張子)を呼び出す必要があります。これどうやってするの?

Visual StudioのVBScriptファイルにアクセスするためのアドインがあります。ただし、コードビハインドのスクリプトにアクセスする必要があります。これを行う方法?

34
balaweblog

次のコードは、プロンプトやエラーがなく、シェルのロゴなしでVBScriptスクリプトを実行します。

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

より複雑な手法は以下を使用することです。

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プロパティを使用すると、プロセス設定への非常にきめ細かいアクセスが可能になります。

スクリプトプログラムでウィンドウなどを表示する場合は、 Windows Script Host を使用する必要があります。 cscriptを直接実行することもできますが、一部のシステムではエディターを起動するだけです:)

62
Ilya Kochetov

別のアプローチは、VB.NETクラスライブラリプロジェクトを作成し、VBScriptコードをVB.NETクラスファイルにコピーし、C#プログラムからVB.NETクラスライブラリを参照することです。

VBScriptとVB.NETの違いを修正する必要があります(ほとんどないはずです)。

ここでの利点は、インプロセスでコードを実行できることです。

4
qxotk

これは権限の問題です。 2008年にこれを行うには、アプリケーションappPoolが最高のアクセス許可レベルで実行されている必要があります。IDは管理者である必要があります。

3
Will

C#からvbsファイルを実行しようとしていますか?

C#コードから他のプログラムを実行する

Process.Start(path);

ただし、何も要求されず、コマンドラインバージョンのインタープリターで実行されていることを確認する必要があります。

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

検索者の利益のために、私はこれを見つけました post 、これは明確な答えを与えます(パラメーターがある場合は特に)。それをテストしました-うまくいくようです。

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
HockeyJ