我有一个调用其他控制台应用程序的控制台应用程序。
我正在使用以下链接获取如何: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部署的应用程序?)
答案 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是否为truevar 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并制造一个怪物 - 感到厌倦了这个想法。