【问题标题】:Exit code from ClickOnce application installationClickOnce 应用程序安装的退出代码
【发布时间】:2015-06-25 12:00:26
【问题描述】:

我发现了几种运行.application ClickOnce 文件的方法。一种方法是简单地将这个文件作为可执行文件运行(让资源管理器完成其余的工作),或者像资源管理器一样使用rundll32.exe 运行它。

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

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

【问题讨论】:

  • 具体来说,一旦应用程序启动,您想做什么?您可以将其添加到可执行文件的启动中吗?
  • 不是在它启动之后而是在它安装之后。我正在制作一个程序(脚本),它可以连续安装一堆不同的应用程序,但是当没有安装 App1 时它不应该安装 App2。其中一个应用程序是 ClickOnce 应用程序,由于它会立即返回退出代码,因此即使 app1 (clickonce) 没有完成安装,某些 app2 也会开始安装。
  • 这个问题是否有任何解决方案或我们可以寻找解决方案的任何链接

标签: c# .net clickonce


【解决方案1】:

迈克,

如果我了解您的情况,您有多个应用程序,其中一个是 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

【讨论】:

    猜你喜欢
    • 2018-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多