.BAT および .VBS スクリプトを実行する小さな Windows サービスを C# で作成しました。次のコードは、.vbs スクリプトをトリガーします。
string path = "C:\\Path\\To\\MyScript.vbs";
Process p = new Process();
p.StartInfo = new ProcessStartInfo();
p.StartInfo.CreateNoWindow = true;
p.StartInfo.WorkingDirectory = Environment.SystemDirectory;
p.StartInfo.FileName = Path.Combine(Environment.SystemDirectory, "cmd.exe");
p.StartInfo.Arguments = "/C C:\\Windows\\System32\\cscript.exe //Nologo \"" + path + "\"";
p.StartInfo.ErrorDialog = false;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.OutputDataReceived += OutputDataReceived;
p.ErrorDataReceived += OutputDataReceived;
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
try
{
p.Start();
p.BeginOutputReadLine();
p.BeginErrorReadLine();
p.WaitForExit();
}
catch { // }
コードは例外なくコンパイルおよび実行されます。ただし、VBS スクリプトは最後まで実行されないため、何か問題がある可能性があります。スクリプト内で、telnet セッションを開き、いくつかのコマンドを入力します。WinForms アプリケーションで同じコードと同じスクリプトを実行すると、すべて問題なく動作します。
この問題は、LOCAL SYSTEM として実行されているサービスが原因であると想定しています。
何か案は?
編集
これは私のVBScriptです:
set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "cmd"
WScript.Sleep 1000
WshShell.SendKeys "telnet 127.0.0.1 3000"
WshShell.SendKeys "{ENTER}"
WScript.Sleep 2000
WshShell.SendKeys "reboot application"
WshShell.SendKeys "{ENTER}"
WScript.Sleep 2000
何らかの理由で、telnet コマンドは実行されませんが、プロセスは終了コード '0' で終了します...