[英]Using C# System.Diagnostics.Process under Wine on Linux
我正在尝试移植在Visual Studio C#下开发的GUI应用程序,以便在Linux上的Wine下运行。 我在使用Process类时遇到问题。 当使用mcs编译并使用mono运行时,以下程序可以按预期工作:
using System.Diagnostics;
using System;
class TestProcess {
static void Main() {
Process process = new Process();
process.StartInfo.UseShellExecute = false;
process.StartInfo.FileName = "/usr/bin/find";
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.Arguments = "/sys";
process.ErrorDataReceived += new DataReceivedEventHandler(output);
process.OutputDataReceived += new DataReceivedEventHandler(output);
process.Start();
process.BeginErrorReadLine();
process.BeginOutputReadLine();
process.WaitForExit();
}
static void output(object sender, DataReceivedEventArgs e) {
Console.WriteLine(e.Data);
}
}
但是,当我使用wine运行它时(我已经在Wine下安装了Mono for Windows),但由于以下异常而失败:
Unhandled Exception: System.InvalidOperationException: Standard error has not been redirected or process has not been started.
at System.Diagnostics.Process.BeginErrorReadLine () [0x00000] in <filename unknown>:0
at (wrapper remoting-invoke-with-check) System.Diagnostics.Process:BeginErrorReadLine ()
at TestProcess.Main () [0x00000] in <filename unknown>:0
我究竟做错了什么?
这是由于Wine的局限性无法解决的。
尽管在Wine下运行的Windows进程可以启动本机进程,但它们无法等待本机进程启动后就可以通过管道与之交互。
有很多解决方法,但是它们都涉及您的一些工作。 您可以,例如:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.