Personalizzare le installazioni con Windows Installer

di Cristian Civera, in .NET Framework,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi