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
Disabilitare automaticamente un workflow di GitHub (parte 2)
Utilizzare la libreria Benchmark.NET per misurare le performance
Installare le Web App site extension tramite una pipeline di Azure DevOps
Usare una container image come runner di GitHub Actions
Code scanning e advanced security con Azure DevOps
Verificare la provenienza di un commit tramite le GitHub Actions
Visualizzare le change sul plan di Terraform tramite le GitHub Actions
Sostituire la GitHub Action di login su private registry
I più letti di oggi
- Riordinare le righe di una GridView di ASP.NET con jQuery
- Creazione di un alarm con suono personalizzato con Windows Phone 7.1
- Utilizzare la session affinity con Azure Container Apps
- Blue-green deployment con Azure Web App e DevOps
- Ed infine anche il calendario :)
- Configurare la diagnostica di Azure attraverso Visual Studio
- Recuperare la data di creazione di un tag tramite una pipeline YAML di Azure DevOps
- Microsoft Security Bulletin MS05-002
- .NET Core e dispositivi IoT
- Eseguire attività pianificate con Azure Container Jobs