2008-12-15 19 views
5

Sto creando un programma di installazione per il progetto di windows # usando VS 2008. Sto provando a scrivere un'azione personalizzata che copia un file di impostazioni dall'origine directory del file MSI memorizzata su un file server (ad es. \ server \ fileshare \ myappinstaller \ mysetting.xml) nella directory di destinazione sul computer su cui è stata installata la mia applicazione (ad es. C: \ Programmi \ My App).Ho bisogno di un'azione MSI personalizzata che copia un file dalla directory di origine MSI

Il file delle impostazioni non può essere aggiunto al programma di installazione in quanto conterrà le impostazioni che saranno univoche per il cliente che installa l'app.

Qualcuno ha codice (preferibilmente C# o VB.NET) per un'azione personalizzata? In alternativa qualcuno sa come ottenere la posizione di origine MSI (ad es. \ Server \ fileshare \ myappinstaller) all'interno di un'azione personalizzata.

Molte grazie

risposta

2

mi sento di raccomandare di aggiungere il file XML per il programma di installazione come uno dei componenti da installare. Questo sarebbe il modo più semplice e non richiederebbe un'azione personalizzata.

WiX potrebbe essere un'opzione per voi. Permette di personalizzare i file di configurazione XML durante l'installazione usando XmlConfig.

0

Normalmente le azioni personalizzate in WindowsInstaller utilizzano qualcosa dalle tabelle di msi per inserire qualcosa in qualsiasi tabella dell'msi.

Inoltre, il team di WindowsInstaller rifiuta qualsiasi estensione gestita per gli installatori, motivo per cui si trovano ovunque sulla rete.

Ma, ho fatto qualche tempo fa a capire una proroga per create managed custom actions per WindowsInstallers, utilizzabile con WiX, che funziona ancora, ma c'è una soluzione più recente in cima a quel lavoro, una vera e propria estensione per WiX per permettere azioni personalizzate gestite .

1

Faccio una cosa simile, ma spedisco una configurazione di default all'interno del file MSI e poi uso un MST per aggiungere il file di configurazione personalizzato. È molto più affidabile poiché tutto è "nativo" per l'installazione di Windows e devo solo inviare un piccolo MST personalizzato a ciascun cliente.

Maggiori informazioni su come sto facendo questo può essere trovato sopra a Simplest solution to replace a tiny file inside an MSI?

5

Ho risolto questo con l'aggiunta

/InstallerPath = "[OriginalDatabase]"

a CustomActionData dell'azione personalizzata (nella scheda Azioni personalizzate del progetto di installazione) e lettura del valore con questo codice nell'azione personalizzata:

Public Overrides Sub Commit(ByVal savedState As System.Collections.IDictionary) 
     MyBase.Commit(savedState) 

     Dim directoryOfMSI As String = IO.Path.GetDirectoryName(Context.Parameters("InstallerPath")) 

     'Do your work here 
     '... 

    End Sub 

Ciao! Stefan

Problemi correlati