使用 ClickOnce 部署 API 以编程方式检查是否有应用程序更新

ClickOnce 提供两种方法来更新部署后的应用程序。 在第一种方法中,可以将 ClickOnce 部署配置为按特定时间间隔自动检查更新。 在第二种方法中,可以编写代码以使用 ApplicationDeployment 类根据事件(如用户请求)检查更新。

备注

.NET Core 和 .NET 5 及更高版本中不支持 System.Deployment.Application 命名空间中的 ApplicationDeployment 类和 API。 在 .NET 7 中,支持一种访问应用程序部署属性的新方法。 有关详细信息,请参阅访问 .NET 中的 ClickOnce 部署属性。 .NET 7 不支持等效的 ApplicationDeployment 方法。

以下过程显示了用于执行编程更新的一些代码,还介绍了如何配置 ClickOnce 部署以启用编程更新检查。

若要以编程方式更新 ClickOnce 应用程序,必须指定更新位置。 这有时称为部署提供程序。 有关设置此属性的详细信息,请参阅选择 ClickOnce 更新策略

备注

还可使用下面所述的技术从一个位置部署应用程序,但从另一个位置更新应用程序。 有关详细信息,请参阅如何:指定部署更新的其他位置

以编程方式检查更新

  1. 使用首选的命令行或可视化工具创建新的 Windows 窗体应用程序。

  2. 创建任何按钮、菜单项或其他用户界面项,供用户选择以检查更新。 从该项的事件处理程序中,调用以下方法来检查和安装更新。

    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;
                    }
                }
            }
        }
    }
    
  3. 编译应用程序。

使用 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 安全性

应用程序必须具有完全信任权限才能使用编程更新。