自定义ClickOnce的“启动时更新”功能

时间:2013-04-07 20:17:08

标签: clickonce customization startup

我正在定制WPF应用程序的ClickOnce部署,我想确保我没有错过关于该过程的一些内容。据我所知,ClickOnce将处理安装应用程序,并可选择在启动时检查更新,还可以选择在应用程序启动后检查设置间隔内的更新。这可以在没有任何自定义代码或自定义的情况下完成。

如果我们想通过编写自己的“安装”程序来定制安装过程。它可以是使用以下演练的标准WPF应用程序。这是与正在安装的应用程序的单独项目。

演练:Creating a Custom Installer for a ClickOnce Application

我们可以通过实施以下演练中的代码来构建“立即检查更新”功能。

如何:Check for Application Updates Programmatically Using the ClickOnce Deployment API

我不确定的是,当用户点击快捷方式打开应用程序时,我们是否可以自定义ClickOnce在启动时检查更新的部分?我喜欢每次用户打开应用程序时检查更新的想法,但我想完全自定义该过程。据我所知,似乎没有办法自定义ClickOnce在启动时检查更新的部分。有人可以验证一下吗?

如果无法自定义“启动时更新”过程,那么我看到的另一个选择是根本不使用ClickOnce并编写我们自己的自定义代码来处理安装,在启动时检查更新,以及检查更新应用程序正在运行

在SO上还有一些其他帖子提出类似这样的问题。

Customize clickonce download screen

我的应用程序确实有动态闪屏。我可以更改该启动画面以显示Checking for updates…之类的消息,如果找不到,则继续加载应用程序。如果找到更新,则强制应用程序重新启动?这里的缺点是我们会看到两次启动画面。

如果是我自己的自定义流程,那么我会有两个EXE,一个是MyApplicatoinUpdate.exe,第二个是MyApplication.exe。快捷方式将启动MyApplicationUpdate.exe以执行Checking for updates,如果找到一些,则下载它们(文件尚未使用)。如果未找到任何更新,请启动MyApplication.exe并让MyApplicationUpdate.exe自行关闭。最后更新更新程序将该逻辑放在MyApplication.exe中。不确定ClickOnce是否允许我自定义它。

谢谢,    -Eric

1 个答案:

答案 0 :(得分:1)

您可以将WPF应用程序设置为不使用自动更新。该设置位于Publish -> Updates... -> (uncheck) The application should check for updates下的项目属性中。禁用该设置后,您可以编写代码来检查和下载更新。

请参阅bottom of this page上的示例,以异步检查ClickOnce更新。您可以将其用作脚手架来构建自己的更新逻辑。

所以,是的,您可以自定义该过程,但您仅限于从ClickOnce API获得的回调。

您可以使用异步回调来更新启动画面上的信息。是的,你有重启,但这是很多商业发射器/更新器的行为。如果更新不重要,您可以等待用户下次重新启动程序。这就是Chrome浏览器更新的方式。

您链接的另一个问题是第一次安装时的演示。如果在首次运行期间不显示默认UI非常重要,则必须编写用户可下载并运行的应用程序。该应用将使用InPlaceHostingManager以编程方式下载您的“真实”应用,同时显示您的自定义用户界面。

如果您在首次安装期间不关心默认UI,则可以将更新逻辑放在主应用程序中,并避免使用两个.exes。如果不显示默认UI非常重要,则必须使用两个.exe解决方案。