Quando si sviluppano applicazioni per Windows, spesso alla conclusione del progetto, si necessita di creare un pacchetto di installazione per distribuire la propria applicazione. Windows Installer è uno strumento fornito da Microsoft per distribuire facilmente le applicazioni che include una serie di caratteristiche per controllare automaticamente i requisiti, la registrazione di componenti particolari e il bootstrap del setup.
In Visual Studio esiste una tipologia di progetto apposito per creare facilmente file msi con un'interfaccia che permette di specificare i file da inserire, le modifiche al registro e le maschere da utilizzare. In alcuni casi questo può però non bastare perché si necessitano di logiche troppo complesse che non sono supportate dal motore standard. In questi casi è possibile sfruttare le custom action che solitamente vengono affiancate da custom installer: delle classi da richiamare per le varie fasi di setup: install, commit, rollback e unistall.
Per creare un custom installer occorre prima di tutto creare un nuovo progetto di tipo class library e inserire un nuova classe che erediti da System.Configuration.Install.Installer marcandola con l'attributo RunInstaller.
[RunInstaller(true)] public partial class SampleInstaller : Installer { }
Si sovrascrivono poi i metodi rappresentanti le varie fasi di installazione nei quali è possibile eseguire qualsiasi operazione. Vengono inoltre in aiuto il dizionaro stateServer che permette di memorizzare e recuperare in un secondo momento informazioni di stato, o l'oggetto Context che con il suo dizionario Parameters permette di leggere parametri in ingresso.
public override void Install(IDictionary stateSaver) { base.Install(stateSaver); // Memorizzo l'ora stateSaver["time"] = DateTime.Now; // Mostro la cartella di installazione MessageBox.Show("Custom install: " + this.Context.Parameters["name"]); } public override void Uninstall(IDictionary savedState) { base.Uninstall(savedState); MessageBox.Show("Custom uninstall at " + savedState["time"]); }
A questo punto occorre includere l'assembly nel progetto di setup (solitamente l'application folder) e posizionari nella schermata relativa alle custom actions. Su ogni fase che si intende intercettare occorre tramite il menu contestuale, premere su "Add Custom Action" e selezionare il custom installer. Eventualmente nel riquadro delle proprietà è possibile specificare tramite CustomActionData dei parametri nella forma /name1=value1 /name2=value2 che verranno passati al dizionario Parameters. Vi sono poi dei parametri speciali che si possono passare, come ad esempio la cartella di installazione. In questo caso il valore da immettere è /name="[TARGETDIR]\".
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Attesa e validazione manuale nelle pipeline YAML di Azure DevOps
Selezione e configurazione degli agent nelle pipeline di Azure DevOps
Modificare automaticamente la Wiki da una pipeline YAML con Azure DevOps
Cancellare automaticamente una pipeline YAML di Azure DevOps
Aggiungere e rimuovere un tag ad un work item in una pipeline di Azure DevOps
Impostare e validare il tipo dei parametri nei template delle pipeline di Azure DevOps
Esecuzione condizionale dei task nelle pipeline YAML di Azure DevOps
DevSecOps applicato ad Azure DevOps
Utilizzare la libreria FluentValidation per validare formalmente un oggetto .NET
Mostrare una percentuale di completamento di un task nelle pipeline YAML di Azure DevOps
Introduzione a GitHub
I più letti di oggi
- Blazor Conference 2021 - Online
- Track 1: @dbochicchio e @cristiancivera con 'Blazor for absolute beginners'Track 2: @apomic80 con 'Dynamic UI with Blazor WebAssembly'Track 3: #aspilive Seguici live su => https://aspit.co/BlazorConf-21
- Track 1: @GiampaoloTUCCI con 'Progressive Web Apps with Blazor'Track 2: @dottor con 'Blazor Tips&Tricks'Track 3: #aspilive Seguici live su => https://aspit.co/BlazorConf-21
- Track 1: @cristiancivera con 'Using Components in Blazor'Track 2: @crad77 con 'Blazor and ASP.NET Core with GraphQL and HotChocolate'Track 3: #aspilive Seguici live su => https://aspit.co/BlazorConf-21