2011-09-12 21 views
7

Sto modificando un programma di installazione WiX esistente per gestire l'aggiornamento di un'installazione esistente di uno dei nostri prodotti. Esistono diversi valori i cui valori predefiniti sono specificati nelle proprietà. Queste proprietà vengono visualizzate all'utente per la modifica e vengono quindi scritte in un file di configurazione personalizzato dal programma di installazione esistente.Utilizzo di un'azione personalizzata WiX per impostare il valore di una proprietà

mio codice deve essere abbastanza intelligente per rilevare se si sta facendo una nuova installazione contro l'installazione di una versione precedente. Se sta eseguendo un'installazione completamente nuova, è necessario impostare le proprietà sui valori predefiniti. Ma se sta facendo un aggiornamento, il codice deve recuperare il valore di quelle proprietà dal file di configurazione esistente e visualizzarle all'utente.

Dalla lettura che ho fatto, mi sembra che ho bisogno di usare una type 51 custom action per impostare le proprietà. Ma come faccio a implementare questa azione personalizzata?

sto pensando che devo definire prima l'azione personalizzata di metterlo nella tabella azione personalizzata, e quindi ho bisogno di attaccare un tag da qualche parte per chiamarlo. E poi ho bisogno di definirlo.

Come posso fare questo? Quale sarebbe un codice di esempio?

risposta

4

Dopo aver fatto ulteriori ricerche sulle azioni personalizzate, credo di aver capito tutto questo. Ho aggiunto un tag binario> < al file .wxs per identificare dove si trova l'azione personalizzata. Ho quindi fatto riferimento all'ID del tag binario in CustomAction. Infine, ho aggiunto un tag personalizzato alla sezione InstallExecuteSequence che faceva riferimento al tag CustomAction per ID.

Il tag personalizzato finale menzionato sopra deve passare alla sezione InstallUISequence, non alla sezione InstallExecuteSequence, poiché l'azione personalizzata deve essere chiamata prima che venga visualizzata la finestra di dialogo.

Per quanto riguarda l'implementazione della stessa azione personalizzata, ho aggiunto un nuovo progetto di libreria di azioni personalizzate C# alla soluzione. Lì ho implementato un metodo, decorato con l'attributo [CustomAction]. Questo metodo utilizza i valori delle proprietà memorizzate nell'oggetto Session passati come parametro al metodo e determina il percorso del file eseguibile della versione corrente. Quindi esegue il lavoro necessario per individuare i valori nel file di configurazione del programma che devono essere conservati tra le versioni e li scrive in altre proprietà per lo script di aggiornamento.

2

Leggere le seguenti sezioni di WiX tutorial:

  1. Extra Actions: offre una panoramica di come aggiungere un'azione personalizzata per MSI;
  2. What's Not in the Book: fornisce un esempio su come implementare un'azione personalizzata nella DLL.
+0

Ecco exectly quello che ho fatto e mi si avvicinò con la soluzione che ho postato. –

1

Esempio:

[CustomAction] 
    public static ActionResult SetProperty(Session session) 
    { 
     try 
     { 
      session.Log("Begin SetProperty action"); 

      session["PROPERTY_NAME"] = "value" 


     } 
     catch (Exception exception) 
     { 
      session.Log("ERROR in custom action SetProperty {0}", exception.ToString()); 

      return ActionResult.Failure; 
     } 

     return ActionResult.Success; 
    } 
Problemi correlati