从ClickOnce应用程序安装中退出代码

时间:2015-06-25 12:00:26

标签: c# .net clickonce

我找到了几种运行.application ClickOnce文件的方法。一个可以简单地将此文件作为可执行文件运行(并让资源管理器执行其余操作)或者使用rundll32.exe将其作为资源管理器运行。

问题是我想等到这个ClickOnce应用程序完成安装。等待Start-Process \path\to\file.application -Wait的退出代码没有意义,因为ClickOnce应用程序作为名为dfsvc.exe的其他进程运行。事情是这个过程通常在后台运行,并且在安装完成后不会退出,所以我不能等到它出现,然后等到它退出。

如何以编程方式检查ClickOnce应用程序是否已完成安装?

1 个答案:

答案 0 :(得分:0)

麦克,

如果我了解您的情况,您有几个应用程序,其中一个是ClickOnce应用程序,您希望这些应用程序同步安装,每个应用程序完全安装,然后再继续安装到下一个应用程序。

我在ClickOnce的几次遇到过类似情况,并通过以下方式确认安装完成:

我选择了一些作为ClickOnce安装过程的一部分安装的文件,并在继续同步阵容中的下一个应用程序之前检查它们是否存在。通常这是通过一些总体安装脚本或exe来完成的,以监视每个连续应用程序的安装。在安装阵容中的下一个程序之前,我经常会使用循环,检查和暂停。下面是一些示例代码,可以让您了解我的意思:

int fileFolderCount = 0;
while (fileFolderCount != beforeInstallCount.Count() || Process.GetProcessesByName("ExeToInstall").Length != 0) 
{
    Thread.Sleep(TimeSpan.FromSeconds(15));
    fileFolderCount = new DirectoryInfo(clickOnceFilesDir)
        .GetFiles("regExpToFindClickOnceFiles", SearchOption.AllDirectories)
        .Count()        // this will recurse through the clickOnceFilesDir and pull files that match the regExpToFindClickOnceFiles. Ideally these will be the files I'm looking for as part of the install.
}

安装完成后,文件将出现,满足循环条件的第一部分,第二个条件是那些设置为在安装时运行的应用程序,以便在继续下一个应用程序之前关闭它们在线安装。

HTH