【发布时间】:2014-02-04 14:55:01
【问题描述】:
我已经部署了一个 ClickOnce Windows 窗体应用程序(应用程序 A)
另一个应用程序(应用程序 B)以文件名作为参数启动应用程序 A。 我用这段代码做到这一点
var basePath = Environment.GetFolderPath(Environment.SpecialFolder.Programs);
var location = String.Format(@"{0}\{1}\{2}\{3}",
basePath, "MyCompany", "MyProduct", "MyApp.appref-ms");
var fileName = @"c:\temp\somefile.ext";
var uri = new Uri(fileName).ToString();
Process.Start(location, uri);
App A 从AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData[0] 获取文件名并显示内容。
这就像一个魅力。但是,现在我希望 App B 等待 App A 退出。
但是对Process.WaitForExit() 的调用会立即返回。
有没有办法打开 ClickOnce 应用程序并等待它退出?如有必要,我可以更改应用程序的打开方式,但要求是我需要将应用程序作为 ClickOnce 应用程序运行(我知道在我的用户配置文件 AppData\Local\Apps\2.0\ 文件夹中的某处,exe 存在并且可以直接启动但如果我这样做,ApplicationDeployment.IsNetworkDeployed 是 false 并且 ApplicationDeployment.CurrentDeployment 是空的。这样我就失去了 ClickOnce 更新功能。
【问题讨论】:
-
我认为这是正确的行为。如果您将 ClickOnce 称为“可执行文件”,它将检查更新。但是这种行为 - 据我所知 - 位于生成的引导程序内部。然后它将调用真正的可执行文件。我想稍后再看看这种行为。一个想法:抓住“真正的”进程并等待它退出?
-
@Herdo - 使用
System.Reflection.Assembly.GetEntryAssembly().Location;很容易实现这一点并且可以工作。但是,我的应用程序设计为从另一个应用程序调用,不会直接启动。如果我这样做,我将失去自我更新功能,这是此应用使用 click once 的主要原因。
标签: c# .net vb.net winforms clickonce