我正在定制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
答案 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解决方案。