var p = Process.Start(@"c:\PsTools\PsExec.exe", @"C:\Windows\System32\notepad.exe");
var err = p.StandardError.ReadToEnd();
var msg = p.StandardOutput.ReadToEnd();
lblStatusResponse.Text = "Err: " + err + "Msg: " + msg;
为什么我的代码不起作用?
我收到错误:
System.InvalidOperationException: StandardError has not been redirected.
但是当我添加以下内容时:
p.StartInfo.RedirectStandardError = true;
var p = Process.Start(@"c:\PsTools\PsExec.exe", @"C:\Windows\System32\notepad.exe");)
它仍然得到同样的错误。
主要问题是我想执行带参数的 exe,但我无法让它工作。
最佳答案
以下代码生成一个新的 p
,这会忽略您在上一个实例中更改的设置:
var p = Process.Start(@"c:\PsTools\PsExec.exe", @"C:\Windows\System32\notepad.exe");)
所以你是否像这样初始化p
并不重要
p.StartInfo.RedirectStandardError = true;
或者不是。
你需要做什么
您需要创建一个 ProcessStartInfo
对象,对其进行配置,然后将其传递给 Process.Start
。
ProcessStartInfo p = new ProcessStartInfo(@"c:\PsTools\PsExec.exe", @"C:\Windows\System32\notepad.exe");
p.UseShellExecute = false;
p.RedirectStandardError = true;
p.RedirectStandardOutput = true;
Process proc = Process.Start(p);
var err = proc.StandardError.ReadToEnd();
var msg = proc.StandardOutput.ReadToEnd();
关于c# - 带参数运行exe不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28607363/