【发布时间】:2012-11-25 13:26:41
【问题描述】:
我使用 Process 类在我的 WPF C# 应用程序中运行 pscp.exe(来自 Putty),如下所示:
Process p = new Process();
p.StartInfo.FileName = "pscp.exe";
p.StartInfo.Arguments = "-v -scp -pw xx toto@192.168.0.1:/path .";
p.Start();
p.WaitForExit();
进程打开命令提示符并正确退出,就ok了。
现在,我想登录一个文件stderr的进程,没问题,我用:
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardError = true;
然后我在我的文件中打印流,但 shell 中没有显示任何内容(没关系,这是一个重定向)。
我的需要是在 shell 中显示标准错误并将其复制到我的日志文件中(没有重定向,我想要两次)。
编辑:一个代表我需要的明确示例: 想象一个 WPF 应用程序,它有一个调用此函数的按钮:
Process p = new Process();
p.StartInfo.FileName = "pscp.exe";
p.StartInfo.Arguments = "-v -scp -pw xx toto@192.168.0.1:/path .";
p.Start();
p.WaitForExit();
进程以 cmd 提示符开始(在其中打印 stdout + stderr),同时在日志文件中打印 stderr。
有什么想法吗?
【问题讨论】:
-
是的,我有办法做到这一点。我忘了说我的应用程序不是控制台应用程序,而是 WPF 应用程序。所以,
Console.WriteLine()不适应,是吗? -
是的,那完全是另一回事。
Log4Net允许您同时登录到文件 和 控制台,您可能想检查一下。我正在删除我之前的(现在没有实际意义的)评论。 -
谢谢,非常好的工具,这可以帮助我进行其他开发,但很抱歉我不明白 Log4Net 如何解决我的问题。如何在不使用禁用我的提示的
UseShellExecute = false;的情况下重定向标准错误(RedirectStandardError = true;)? -
对不起,我把它弄反了。如果我能让它工作,我会摆弄一些代码并回复答案。
-
上,你成功了吗?