使用 ClickOnce 部署 API 以编程方式检查是否有应用程序更新
ClickOnce 提供两种方法来更新部署后的应用程序。 在第一种方法中,可以将 ClickOnce 部署配置为按特定时间间隔自动检查更新。 在第二种方法中,可以编写代码以使用 ApplicationDeployment 类根据事件(如用户请求)检查更新。
备注
.NET Core 和 .NET 5 及更高版本中不支持 System.Deployment.Application 命名空间中的 ApplicationDeployment 类和 API。 在 .NET 7 中,支持一种访问应用程序部署属性的新方法。 有关详细信息,请参阅访问 .NET 中的 ClickOnce 部署属性。 .NET 7 不支持等效的 ApplicationDeployment 方法。
以下过程显示了用于执行编程更新的一些代码,还介绍了如何配置 ClickOnce 部署以启用编程更新检查。
若要以编程方式更新 ClickOnce 应用程序,必须指定更新位置。 这有时称为部署提供程序。 有关设置此属性的详细信息,请参阅选择 ClickOnce 更新策略。
备注
还可使用下面所述的技术从一个位置部署应用程序,但从另一个位置更新应用程序。 有关详细信息,请参阅如何:指定部署更新的其他位置。
以编程方式检查更新
使用首选的命令行或可视化工具创建新的 Windows 窗体应用程序。
创建任何按钮、菜单项或其他用户界面项,供用户选择以检查更新。 从该项的事件处理程序中,调用以下方法来检查和安装更新。
private void InstallUpdateSyncWithInfo() { UpdateCheckInfo info = null; if (ApplicationDeployment.IsNetworkDeployed) { ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment; try { info = ad.CheckForDetailedUpdate(); } catch (DeploymentDownloadException dde) { MessageBox.Show("The new version of the application cannot be downloaded at this time. \n\nPlease check your network connection, or try again later. Error: " + dde.Message); return; } catch (InvalidDeploymentException ide) { MessageBox.Show("Cannot check for a new version of the application. The ClickOnce deployment is corrupt. Please redeploy the application and try again. Error: " + ide.Message); return; } catch (InvalidOperationException ioe) { MessageBox.Show("This application cannot be updated. It is likely not a ClickOnce application. Error: " + ioe.Message); return; } if (info.UpdateAvailable) { Boolean doUpdate = true; if (!info.IsUpdateRequired) { DialogResult dr = MessageBox.Show("An update is available. Would you like to update the application now?", "Update Available", MessageBoxButtons.OKCancel); if (!(DialogResult.OK == dr)) { doUpdate = false; } } else { // Display a message that the app MUST reboot. Display the minimum required version. MessageBox.Show("This application has detected a mandatory update from your current " + "version to version " + info.MinimumRequiredVersion.ToString() + ". The application will now install the update and restart.", "Update Available", MessageBoxButtons.OK, MessageBoxIcon.Information); } if (doUpdate) { try { ad.Update(); MessageBox.Show("The application has been upgraded, and will now restart."); Application.Restart(); } catch (DeploymentDownloadException dde) { MessageBox.Show("Cannot install the latest version of the application. \n\nPlease check your network connection, or try again later. Error: " + dde); return; } } } } }
编译应用程序。
使用 Mage.exe 来部署以编程方式检查更新的应用程序
按照演练:手动部署 ClickOnce 应用程序中的说明,使用 Mage.exe 部署应用程序。 调用 Mage.exe生成部署清单时,请确保使用命令行开关
providerUrl
,并指定 ClickOnce 应在其中检查更新的 URL。 例如,如果应用程序从http://www.adatum.com/MyApp
进行更新,用于生成部署清单的调用可能如下所示:mage -New Deployment -ToFile WindowsFormsApp1.application -Name "My App 1.0" -Version 1.0.0.0 -AppManifest 1.0.0.0\MyApp.manifest -providerUrl http://www.adatum.com/MyApp/MyApp.application
使用 MageUI.exe 来部署以编程方式检查更新的应用程序
- 按照演练:手动部署 ClickOnce 应用程序中的说明,使用 Mage.exe 部署应用程序。 在“部署选项”选项卡上,将“开始位置”字段设置为 ClickOnce 应检查更新的应用程序清单 。 在“更新选项”选项卡上,清除“此应用程序应检查更新”复选框 。
.NET Framework 安全性
应用程序必须具有完全信任权限才能使用编程更新。