如何始终在C#中运行进程的新实例?

如何始终在C#中运行进程的新实例?,c#,process,C#,Process,基于此, Process.Start()没有用处 Start可能会返回一个具有HasExited属性的非空进程 已设置为true。在这种情况下,已启动的进程可能已停止 激活自身的现有实例,然后退出 在我的例子中,我想为新实例中的xml启动一个默认编辑器,这样我就可以使用Process.HasExited属性对我的WPF应用程序执行操作。我所看到的只是本地样本或比想象中复杂的方式。最好的解决方案是什么 Process process = Process.Start(MyFileXMlPath);

基于此,
Process.Start()
没有用处

Start可能会返回一个具有HasExited属性的非空进程 已设置为true。在这种情况下,已启动的进程可能已停止 激活自身的现有实例,然后退出

在我的例子中,我想为新实例中的xml启动一个默认编辑器,这样我就可以使用Process.HasExited属性对我的WPF应用程序执行操作。我所看到的只是本地样本或比想象中复杂的方式。最好的解决方案是什么

Process process = Process.Start(MyFileXMlPath);
//Wait for the Editor to be closed.
if (process != null) 
    while (!process.HasExited) ;

这就是我现在拥有的。因此,我使用用户首选的编辑器。

发生的是预期的行为-编辑器被要求打开一个文件,它正在现有的运行进程中打开该文件。一种解决方案可能是获取盒子上所有正在运行的进程,并对它们进行迭代以找到新的进程,但这可能有问题,因为实际上没有很好的方法来判断哪个进程打开了文件


您可能要做的是将UseShellExecute设置为false,显式运行所需的编辑器(例如@“c:\Windows\notepad.exe”),并将文件名作为参数传递,这通常是打开文件的惯例。显然,您希望选择一个不调用现有实例的编辑器。

您能解释一下现在发生了什么吗?它起作用了吗?您只是担心警告,还是有时会看到一个进程将其
HasExited
属性设置为
true
?它总是在运行进程的一个窗口中打开XML。另外,进程句柄为null,我的应用程序不会等待用户完成并关闭窗口以对新的xml文件执行操作。所以,如果我让Process.Start(MyFileXMLPath)始终启动一个新实例,所有问题都会得到解决。似乎我对使用用户首选编辑器的要求非常严格(至少到目前为止)。因此,我将使用Interops和本机API查找默认编辑器,并使用ProcessInfo单独启动该程序。将使用解决方案更新此线程。看来这是唯一的办法?那可能没用。编辑器本身决定使用现有进程,而不是shell。关闭:我通过读取文件扩展名的AssocProgram并使用我的文件路径启动该程序来修复它。这将始终启动新实例。