从C#问题执行命令

时间:2011-05-06 17:16:24

标签: c# command-line process windows-desktop-gadgets

我已经制作了一个用于监控sidebar.exe的小型C#工具(因为有些人知道其中有一个奇怪的内存泄漏,所以当监视器达到限制时,此监视器会重新启动sidebar.exe进程...)。

在此之前,我有一个.bat文件,我手动运行它,它工作正常。现在,我正在从C#执行cmd命令,但行为不同:在“start sidebar.exe”之后,7个小工具中只有4个再次出现。它总是发生在程序中,而不是手动运行。

以.bat或进程运行命令有什么区别?我可以解决这个问题吗?

我也试过从进程中运行.bat本身,同样的问题......

命令是:

taskkill /im sidebar.exe /f

.bat中的

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#问题,仍然会很感激。

1 个答案:

答案 0 :(得分:0)

我相信您的问题出在您所处的环境中。更多信息很有帮助,但这里有一些尝试。

使用System.Diagnostics namepsace,创建ProcessStartInfo对象并提供相应的信息,尤其是确保提供登录用户的用户名。

使用此ProcessStartInfo对象作为Process.Start(ProcessStartInfo)调用的参数。

那应该在适当的用户帐户下启动流程。

现在,如果您将此作为服务运行,您可能会遇到其他问题,因为服务无法访问GUI,而设计服务并不打算允许用户输入,因此环境可能也受到限制,侧边栏可能无法找到其保存的设置。

知道我应该在点击提交之前点击刷新:)