使用 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 Forms 應用程式。
建立您想要使用者選取以檢查更新的任何按鈕、功能表項目或其他使用者介面項目。 從該項目的事件處理常式中,呼叫下列方法來檢查並安裝更新。
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 部署應用程式,以程式設計方式檢查更新
請遵循使用 Mage.exe 部署應用程式的指示,如逐步解說:手動部署 ClickOnce 應用程式中所述。 呼叫 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 部署應用程式,以程式設計方式檢查更新
- 請遵循使用 Mage.exe 部署應用程式的指示,如逐步解說:手動部署 ClickOnce 應用程式中所述。 在 [部署選項] 索引標籤上,將 [開始位置] 欄位設定為應用程式資訊清單 ClickOnce 應該檢查更新。 在 [更新選項] 索引標籤上,清除 [此應用程式應該檢查更新] 核取方塊。
.NET Framework 安全性
您的應用程式必須有完全信任權限才能使用程式設計更新。