我有一个 WPF 应用程序,我需要启动一个单独的 MFC 应用程序,然后与之通信。我打算使用Process.Start
,但我想知道这些天是否有更好的方法来做到这一点。我可以自己研究事物,但我需要知道从哪里开始。谢谢。
编辑:
我发现这表明没有。这是真的?
System.Diagnostics.Process.Start() 的替代方案
谢谢。
我有一个 WPF 应用程序,我需要启动一个单独的 MFC 应用程序,然后与之通信。我打算使用Process.Start
,但我想知道这些天是否有更好的方法来做到这一点。我可以自己研究事物,但我需要知道从哪里开始。谢谢。
编辑:
我发现这表明没有。这是真的?
System.Diagnostics.Process.Start() 的替代方案
谢谢。
对于您的直接问题,.NET 的最新版本中没有什么新东西可以提供更好或更最新的方式来启动本地可执行文件。Process.Start 是(并且一直是)要走的路。
最简单、最方便的方法是在 Process 上选择五个静态方法之一。传递字符串或填充的 StartInfo 实例。如果您需要更多地控制流程的提出方式,您将使用后者。或者对您的情况感兴趣,如果您想将程序的 stdio 作为流传输到您自己的应用程序中。这是从我的一个实用程序填充 Start Info 实例的示例...
ProcessStartInfo start = new ProcessStartInfo(BaseIoConstantsProvider.CommandProcessor)
{
Arguments = BaseIoConstantsProvider.KeepAlive,
UseShellExecute = false,
CreateNoWindow = BaseIoConstantsProvider.NoDosWindow,
RedirectStandardOutput = true,
RedirectStandardInput = true,
RedirectStandardError = true,
WindowStyle = ProcessWindowStyle.Hidden,
};
对于您问题的第二部分,如果您需要在启动后与进程交互,则静态方法将不起作用。从同一个实用程序...
Process p = new Process { StartInfo = start, EnableRaisingEvents = true };
p.ErrorDataReceived += PErrorDataReceived;
p.Exited += PExited;
p.Start();
p.StandardInput.AutoFlush = true;
p.StandardInput.WriteLine(cmdLine);
p.BeginOutputReadLine();
这个例子展示了两个事件被挂钩以及从进程中读取标准输入输出。它非常适合这个目的,但如果你只是想启动另一个可执行文件,那就大材小用了。
因此,选择启动方法的主要决定因素是:我的应用程序启动后是否需要与进程交互?
最后,有时您可能想要调用规范动词,甚至创建自己的动词来启动给定过程。当您右键单击某个项目时,它们会出现在上下文菜单中,并为您启动进程提供了很多额外的灵活性。这里有一篇很棒的文章http://msdn.microsoft.com/en-us/library/windows/desktop/cc144101(v=vs.85).aspx#canonical关于如何实现动词。