0

.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' で終了します...

4

1 に答える 1

0

わかりました-ユーザーがログインしていない場合、SendKeysは機能しません。コード自体は完全に正常に機能します。

于 2013-09-18T13:32:13.873 に答える