我在C#(WPF)中编写了一个应用远程主机数据的应用程序(使用Psexec)。
该应用要求您具有高权限(管理员)。
我的应用中有这种代码:
var proc = new Process {
StartInfo = new ProcessStartInfo {
FileName = "psexec.exe",
Arguments = "\\\\" + ip + " ipconfig",
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true
}
};
proc.Start();
if (!proc.WaitForExit(60000))
proc.Kill();
output_error = proc.StandardError.ReadToEnd();
output_stan = proc.StandardOutput.ReadToEnd();
如果我从Visual Studio运行应用程序(在调试模式下),我会得到一个输出,但是当我从exe文件运行应用程序时,标准的重定向输出只是空的。 / p>
有没有人可以解决这个问题?
*作为错误重定向的输出是一个standrad psexec输出,它基本上说该命令只能找到(错误0)。
THX。
答案 0 :(得分:0)
来自MSDN:
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "Write500Lines.exe";
p.Start();
// To avoid deadlocks, always read the output stream first and then wait.
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
特别注意在阅读流之前你不应该等待,否则你可能会遇到死锁。
我已修改您的代码以这种方式执行,以下工作正常对我来说:
static void Main(string[] args)
{
var proc = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "ping.exe",
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true
}
};
proc.Start();
string output_error = proc.StandardError.ReadToEnd();
string output_stan = proc.StandardOutput.ReadToEnd();
proc.WaitForExit();
Trace.TraceInformation(output_stan);
}