Controllo programmatico degli aggiornamenti delle applicazioni attraverso l'API per la distribuzione ClickOnce
ClickOnce offre due modi per aggiornare un'applicazione dopo la distribuzione. Nel primo metodo è possibile configurare la distribuzione ClickOnce per verificare automaticamente la presenza di aggiornamenti a intervalli specifici. Nel secondo metodo è possibile scrivere codice che usa la classe per verificare la ApplicationDeployment disponibilità di aggiornamenti in base a un evento, ad esempio una richiesta utente.
Nota
La ApplicationDeployment classe e le API nello System.Deployment.Application spazio dei nomi non sono supportate in .NET Core e .NET 5 e versioni successive. In .NET 7 è supportato un nuovo metodo di accesso alle proprietà di distribuzione dell'applicazione. Per altre informazioni, vedere Accedere alle proprietà di distribuzione ClickOnce in .NET. .NET 7 non supporta l'equivalente dei metodi ApplicationDeployment.
Le procedure seguenti illustrano un codice per eseguire un aggiornamento a livello di codice e descrivono anche come configurare la distribuzione ClickOnce per abilitare i controlli di aggiornamento a livello di codice.
Per aggiornare un'applicazione ClickOnce a livello di codice, è necessario specificare un percorso per gli aggiornamenti. Questa operazione viene talvolta definita provider di distribuzione. Per altre informazioni sull'impostazione di questa proprietà, vedere Scegliere una strategia di aggiornamento ClickOnce.
Nota
È anche possibile usare la tecnica descritta di seguito per distribuire l'applicazione da un percorso, ma aggiornarla da un'altra. Per altre informazioni, vedere Procedura: Specificare un percorso alternativo per gli aggiornamenti della distribuzione.
Per verificare la disponibilità di aggiornamenti a livello di codice
Creare una nuova applicazione Windows Form usando la riga di comando o gli strumenti visivi preferiti.
Crea qualsiasi pulsante, voce di menu o altra voce dell'interfaccia utente che vuoi che gli utenti selezionino la disponibilità di aggiornamenti. Dal gestore eventi dell'elemento chiamare il metodo seguente per verificare la presenza e l'installazione degli aggiornamenti.
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; } } } } }
Compilare l'applicazione.
Usare Mage.exe per distribuire un'applicazione che verifica la disponibilità di aggiornamenti a livello di codice
Seguire le istruzioni per distribuire l'applicazione usando Mage.exe come illustrato in Procedura dettagliata: Distribuire manualmente un'applicazione ClickOnce. Quando si chiama Mage.exe per generare il manifesto della distribuzione, assicurarsi di usare l'opzione
providerUrl
della riga di comando e di specificare l'URL in cui ClickOnce deve verificare la disponibilità di aggiornamenti. Se l'applicazione verrà aggiornata dahttp://www.adatum.com/MyApp
, ad esempio, la chiamata per generare il manifesto della distribuzione potrebbe essere simile alla seguente: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
Uso di MageUI.exe per distribuire un'applicazione che controlla la disponibilità di aggiornamenti a livello di codice
- Seguire le istruzioni per distribuire l'applicazione usando Mage.exe come illustrato in Procedura dettagliata: Distribuire manualmente un'applicazione ClickOnce. Nella scheda Opzioni di distribuzione impostare il campo Percorso di avvio sul manifesto dell'applicazione ClickOnce deve verificare la presenza di aggiornamenti. Nella scheda Opzioni di aggiornamento deselezionare la casella di controllo Questa applicazione deve controllare la disponibilità di aggiornamenti .
Sicurezza di .NET Framework
Per usare l'aggiornamento a livello di codice, l'applicazione deve disporre di autorizzazioni di attendibilità totale.