执行来自 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# 问题,仍然会不胜感激。
您的问题出在您工作的环境中。 更多信息很有帮助,但这里有一些尝试。
使用 System.Diagnostics 名称,创建一个 ProcessStartInfo 对象并提供相应的信息,特别是确保提供了登录用户的用户名。
使用此 ProcessStartInfo 对象作为 Process.Start(ProcessStartInfo) 调用的参数。
这应该在正确的用户帐户下启动该过程。
现在,如果您将其作为服务运行,则可能会遇到其他问题,因为服务无法访问 GUI 设计服务不打算允许用户输入,因此环境也可能受到限制,侧边栏可能无法找到其保存的设置。
知道我应该在单击提交之前点击刷新:)