我找到了几种运行.application
ClickOnce文件的方法。一个可以简单地将此文件作为可执行文件运行(并让资源管理器执行其余操作)或者使用rundll32.exe
将其作为资源管理器运行。
问题是我想等到这个ClickOnce应用程序完成安装。等待Start-Process \path\to\file.application -Wait
的退出代码没有意义,因为ClickOnce应用程序作为名为dfsvc.exe
的其他进程运行。事情是这个过程通常在后台运行,并且在安装完成后不会退出,所以我不能等到它出现,然后等到它退出。
如何以编程方式检查ClickOnce应用程序是否已完成安装?
答案 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