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
Visualizzare le change sul plan di Terraform tramite le GitHub Actions
Generare la software bill of material (SBOM) in GitHub
Code scanning e advanced security con Azure DevOps
Triggerare una pipeline su un altro repository di Azure DevOps
Eseguire i worklow di GitHub su runner potenziati
Eseguire script pre e post esecuzione di un workflow di GitHub
Creare una custom property in GitHub
Creare un webhook in Azure DevOps
Installare le Web App site extension tramite una pipeline di Azure DevOps
Rinnovare il token di una GitHub App durante l'esecuzione di un workflow
Usare una container image come runner di GitHub Actions
Ottenere un token di accesso per una GitHub App