我在C#中编写了一个小型Windows服务,它执行.BAT和.VBS脚本。以下代码触发.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命令永远不会被执行,但是进程仍然以exitcode“0”结束......
答案 0 :(得分:0)
知道了 - 当没有用户登录时,SendKeys不起作用。代码本身工作正常。