ClickOnce 可以提供自动应用程序更新。ClickOnce 应用程序会定期读取其部署清单文件,以查看是否有可用的应用程序更新。如果有,则会下载并运行应用程序的新版本。为提高效率,仅下载那些已更改的文件。
设计 ClickOnce 应用程序时,需要确定应用程序将使用何种策略来检查可用的更新。有三种基本策略可以使用:在应用程序启动时检查更新、在应用程序启动后检查更新(在后台线程中运行)或是提供进行更新的用户界面。此外,还可以确定应用程序检查更新的时间间隔,并且可以强制必须执行更新。
注意 |
|---|
| 应用程序更新需要网络连接。如果不存在网络连接,则应用程序会在不检查更新的情况下运行,而无论选择的是何种更新策略。 |
在应用程序启动后检查更新
如果使用该默认策略,则应用程序会在运行期间尝试在后台查找并读取部署清单文件。如果某个更新可用,则当用户下一次运行应用程序时,会提示用户下载并安装该更新。
此策略最适用于低带宽的网络连接或可能需要长时间下载的较大应用程序。
若要启用此更新策略,请在“应用程序更新”对话框的“选择应用程序何时应该检查更新”部分中单击“在应用程序启动后”。
注意 |
|---|
| 此为默认设置。 |
若要启用此更新策略,请对部署清单中的“Update”元素进行如下更改:
<!-- When to check for updates -->
<subscription>
<update>
<expiration maximumAge="6" unit="hours" />
</update>
</subscription>
在应用程序启动时检查更新
如果使用此策略,则每当用户启动应用程序时,应用程序都会尝试查找并读取部署清单文件。如果某个更新可用,则会下载并启动该更新;否则,会启动现有版本的应用程序。
此策略最适用于高带宽的网络连接;在低带宽连接上启动应用程序时的长时间延迟可能令人无法接受。
若要启用此更新策略,请在“应用程序更新”对话框的“选择应用程序何时应该检查更新”部分中单击“在应用程序启动前”。有关更多信息,请参见“应用程序更新”对话框。
若要启用此更新策略,请对“Update”元素进行如下更改:
<!-- When to check for updates -->
<subscription>
<update>
<beforeApplicationStartup />
</update>
</subscription>
强制执行更新
在有些情况下,您可能需要要求用户运行更新版本的应用程序。例如,您可能对诸如 Web 服务等外部资源进行了某种更改,而这种更改会使得较早版本的应用程序不能正常工作。在这种情况下,您需要将更新标记为“必需”,并阻止用户运行较早的版本。
注意 |
|---|
| 虽然使用其他更新策略也可以强制进行更新,但是在应用程序启动时检查更新是保证不运行较早版本的应用程序的唯一方法。 |
若要将更新标记为“必需”,请在“应用程序更新”对话框中单击“强制进行更新”。有关更多信息,请参见“应用程序更新”对话框。
若要将更新标记为“必需”,请设置部署清单中的“Deployment”元素的“minimumRequiredVersion”属性;例如:
<deployment install="true" minimumRequiredVersion="1.0.0.0">
指定更新时间间隔
还可以指定应用程序检查更新的频率。例如,您可能希望在应用程序每次运行时都检查更新,或是一周检查一次或一个月检查一次。如果在指定时间不存在网络连接,则更新检查会在应用程序下一次运行时执行。
若要指定更新时间间隔,请在“应用程序更新”对话框中设置“指定应用程序检查更新的频率”属性。有关更多信息,请参见“应用程序更新”对话框。
若要指定更新时间间隔,请编辑部署清单中的“Update”元素的“maximumAge”和“unit”属性。
注意,设置应用程序在启动后执行检查的方式本质上是指定一个更新间隔;请参见上面的“在应用程序启动后检查更新”。
提供进行更新的用户界面
如果使用此策略,应用程序开发人员会提供一个用户界面,用户可通过该用户界面选择应用程序检查更新的时间和频率。例如,可以提供一个“Check for Updates Now”(立即检查更新)菜单项,或是一个提供有不同更新时间间隔选项的“Update Settings”(更新设置)对话框。ClickOnce 部署 API 提供一个框架,用于对您自己的更新用户界面进行编程。有关更多信息,请参见 System.Deployment.Application 命名空间。
如果应用程序使用部署 API 控制它自己的更新逻辑,则应按下面在“阻止更新检查”中介绍的那样阻止更新检查。
此策略最适用于您需要为不同用户提供不同更新策略的情况。
阻止更新检查
还可以阻止应用程序检查更新。例如,您有一个永不更新的简单应用程序,但您希望利用 ClickOnce 部署提供的安装便利。
如果应用程序使用部署 API 执行它自己的更新,也应阻止更新检查;请参见上面的“提供进行更新的用户界面”。
若要阻止更新检查,请在“应用程序更新”对话框中清除“应用程序应该检查更新”复选框。
也可以通过从部署清单中移除 <Subscription> 标记来阻止更新检查。
请参见