执行来自 C# 的命令问题

本文关键字:命令 问题 执行 | 更新日期: 2023-09-27 17:55:45

我做了一个小的C#工具来监视侧边栏.exe(因为有些人知道其中有一个奇怪的内存泄漏,所以这个监视器在达到限制时重新启动侧边栏.exe进程......

在此之前,我有一个.bat文件在做这件事,我手动运行它,它工作正常。现在,我正在执行 C# 中的 cmd 命令,但行为有所不同:7 个小工具中只有 4 个在"启动侧边栏.exe"之后再次出现。它总是发生在程序中,而不是手动运行时。

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

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

这些命令是:

taskkill /im sidebar.exe /f

TIMEOUT /T 2.bat或程序中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,使用返回侧边栏用法的小 exe.exe) - 工作完美。如果有人知道这个 C# 问题,仍然会不胜感激。

执行来自 C# 的命令问题

我相信

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

使用 System.Diagnostics 名称,创建一个 ProcessStartInfo 对象并提供相应的信息,特别是确保提供了登录用户的用户名。

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

这应该在正确的用户帐户下启动该过程。

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

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