0

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

我正在使用以下链接获取操作方法: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();

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

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

4

2 回答 2

0

Process.Start Method (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 是否为真

var process = Process.Start(shortcutPath, arguments);
if (process != null && process.HasExited != true)
{
    process.WaitForExit();
}
else
{
    // Process is null or have exited
}
于 2016-04-10T08:06:40.130 回答
0

好的,在一天的大部分时间里把我的头撞到墙上之后,我发现了这个......启动一个离线 ClickOnce 应用程序并等待退出

使用互斥锁选项。Fek me Microsoft,您已经采用了一些曾经非常简单的东西,并把它变成了真正的马屁精。

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

于 2016-04-10T19:11:12.017 回答