我已经制作了一个用于监控sidebar.exe的小型C#工具(因为有些人知道其中有一个奇怪的内存泄漏,所以当监视器达到限制时,此监视器会重新启动sidebar.exe进程...)。
在此之前,我有一个.bat文件,我手动运行它,它工作正常。现在,我正在从C#执行cmd命令,但行为不同:在“start sidebar.exe”之后,7个小工具中只有4个再次出现。它总是发生在程序中,而不是手动运行。
以.bat或进程运行命令有什么区别?我可以解决这个问题吗?
我也试过从进程中运行.bat本身,同样的问题......
命令是:
taskkill /im sidebar.exe /f
TIMEOUT /T 2
或程序中的System.Threading.Thread.Sleep(2000);
start sidebar.exe
更新:我尝试的代码:
选项1 - 运行.bat:System.Diagnostics.Process.Start(@"C:\....restart.bat");
选项2 - 运行命令:
...
this.executeCmd("taskkill /im sidebar.exe /f");
System.Threading.Thread.Sleep(2000);
this.executeCmd("start sidebar.exe");
...
private void executeCmd(String command)
{
ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("cmd", "/c " + command);
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
psi.CreateNoWindow = true;
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = psi;
proc.Start();
string result = proc.StandardOutput.ReadToEnd();
System.Console.Out.WriteLine(result);
}
更新:
我被告知这是一些权限/帐户/用户问题,试图解决它没有成功,但我注意到在Java中这没有发生所以我结合Java和C#这个工具(一个java runnable在启动时调用,使用一个小的exe返回sidebar.exe的用法) - 工作完美。如果有人知道这个C#问题,仍然会很感激。
答案 0 :(得分:0)
我相信您的问题出在您所处的环境中。更多信息很有帮助,但这里有一些尝试。
使用System.Diagnostics namepsace,创建ProcessStartInfo对象并提供相应的信息,尤其是确保提供登录用户的用户名。
使用此ProcessStartInfo对象作为Process.Start(ProcessStartInfo)调用的参数。
那应该在适当的用户帐户下启动流程。
现在,如果您将此作为服务运行,您可能会遇到其他问题,因为服务无法访问GUI,而设计服务并不打算允许用户输入,因此环境可能也受到限制,侧边栏可能无法找到其保存的设置。
知道我应该在点击提交之前点击刷新:)