C# Process.Start - 如何执行 WaitForExit

C# Process.Start - how to enforce WaitForExit

我有一个调用其他控制台应用程序的控制台应用程序。

我正在使用以下 link 作为指南:https://robindotnet.wordpress.com/2010/03/21/how-to-pass-arguments-to-an-offline-clickonce-application/

我无法实例化进程并使用它,因为我收到错误消息 "The specified executable is not a valid application for this OS platform."

我可以使用进程的静态版本调用应用,例如

Process.Start(shortcutPath, arguments);

Process.Start(shortcutPath, arguments).WaitForExit();

但是,我无法获得 WaitForExit 的流程 - 一个应用程序被调用,一段时间后,在第一个应用程序完成之前,第二个应用程序被调用 - 这是一个问题,因为它取决于第一个应用程序的完成。

关于如何让进程的静态版本等待退出的任何建议(或者如何实例化进程并能够调用 clickonce 部署的应用程序?)

Process.Start 方法 (String,‹String) 的 return 值为 System.Diagnostics.Process

根据https://msdn.microsoft.com/en-us/library/h6ak8zt5%28v=vs.110%29.aspx是:

与进程资源关联的新进程,如果没有启动进程资源,则为空。请注意,与同一进程的 运行 个实例一起启动的新进程将独立于其他进程。此外,Start 可能 return 一个非空进程,其 HasExited 属性 已经设置为 true。在这种情况下,启动的进程可能已激活其自身的现有实例,然后退出。

所以我会在调用 WaitForExit

之前检查 process.HasExited 是否为真
var process = Process.Start(shortcutPath, arguments);
if (process != null && process.HasExited != true)
{
    process.WaitForExit();
}
else
{
    // Process is null or have exited
}

好吧,在一天的大部分时间里我的头撞在墙上之后,我发现了这个...... Start an offline ClickOnce Application and wait for Exit

使用互斥锁选项。 Fek me Microsoft,你把过去非常简单的东西变成了一个真正的马屁股。

我正要废弃我调用的 exe 文件并创建一个怪物 - 一想到这个我就觉得不舒服。