2013-04-07 75 views
1

我正在定制WPF应用程序的ClickOnce部署,并且希望确保我不会错过关于该过程的某些内容。据我所知,ClickOnce将处理安装应用程序,并可选择在启动时检查更新,还可以选择在应用程序启动后按设定的时间间隔检查更新。这可以在没有任何自定义代码或定制的情况下完成。自定义ClickOnce的“Update at Statup”功能

如果我们想要我们可以通过编写我们自己的“安装”程序来定制安装过程。它可以是使用以下演练的标准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自行关闭。最后更新updater将这个逻辑放在MyApplication.exe。不知道ClickOnce是否会允许我定制它。

感谢, -Eric

回答

1

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

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

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

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

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

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