C#Process.Start - 如何强制执行WaitForExit

时间:2016-04-10 07:10:55

标签: c# process clickonce waitforexit

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

我正在使用以下链接获取如何:https://robindotnet.wordpress.com/2010/03/21/how-to-pass-arguments-to-an-offline-clickonce-application/

我无法实例化Process并使用它,因为我收到错误消息“指定的可执行文件不是此OS平台的有效应用程序。”

我可以使用静态版本的Process调用应用程序。

Process.Start(shortcutPath, arguments);

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

然而,我无法将Process转到WaitForExit - 一个应用程序被调用,一段时间后,在第一个应用程序完成之前,第二个应用程序被调用 - 这是一个问题,因为它取决于第一个应用程序要完成。

有关如何获取静态版本的Process等待退出的任何建议(alt。如何实例化Process并能够调用clickonce部署的应用程序?)

2 个答案:

答案 0 :(得分:0)

Process.Start方法(String,String)的返回值为System.Diagnostics.Process

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

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

所以我会在调用WaitForExit

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

答案 1 :(得分:0)

好的,在一天中最好的时候把头撞到墙上之后,我发现了这个...... Start an offline ClickOnce Application and wait for Exit

使用互斥锁选项。嘲笑我微软,你已经采取了一些过去非常简单的东西,并从中汲取了真正的马匹。

我正准备废弃我所谓的exe并制造一个怪物 - 感到厌倦了这个想法。