2008-12-15 6 views
5

Je crée un programme d'installation pour le projet AC# Windows à l'aide de VS 2008. J'essaie d'écrire une action personnalisée qui copie un fichier de paramètres de la source répertoire du fichier MSI stocké sur un serveur de fichiers (par exemple \ server \ fileshare \ myappinstaller \ mysetting.xml) dans le répertoire cible sur l'ordinateur sur lequel mon application est installée (par exemple C: \ Program Files \ My App).J'ai besoin d'une action personnalisée MSI qui copie un fichier à partir du répertoire source MSI

Le fichier de paramètres ne peut pas être ajouté au programme d'installation car il contiendra des paramètres uniques pour le client qui installe l'application.

Est-ce que quelqu'un a du code (de préférence C# ou VB.NET) pour une telle action personnalisée? Alternativement, quelqu'un sait comment obtenir l'emplacement source MSI (par exemple \ server \ fileshare \ myappinstaller) dans une action personnalisée.

Un grand merci

Répondre

2

Je vous recommande d'ajouter le fichier XML à l'installateur comme l'un des composants à installer. Ce serait le moyen le plus simple et ne nécessiterait pas d'action personnalisée.

WiX pourrait être une option pour vous. Il vous permet de personnaliser les fichiers de configuration XML lors de l'installation à l'aide de XmlConfig.

0

Normalement les actions personnalisées dans WindowsInstaller utilisent quelque chose des tables du msi pour mettre quelque chose dans n'importe quelle table du msi.

En outre, l'équipe WindowsInstaller décline toutes les extensions managées pour les installateurs, les raisons pour cela se trouvent partout sur le net.

Mais, je fait un certain temps La figure il y a sur une extension de create managed custom actions pour WindowsInstallers, utilisable avec WiX, qui fonctionne encore, mais il y a une solution plus récente au-dessus de ce travail, une véritable extension pour WiX pour permettre gérés actions personnalisées .

1

Je fais une chose similaire, mais expédier une configuration par défaut dans le fichier MSI, puis utiliser un MST pour ajouter le fichier de configuration personnalisé. C'est beaucoup plus fiable car tout est "natif" pour Windows Installer et j'ai juste besoin d'envoyer un petit MST personnalisé à chaque client.

Plus d'informations sur la façon dont je fais cela se trouve sur au Simplest solution to replace a tiny file inside an MSI?

5

J'ai résolu ce problème en ajoutant

/InstallerPath = "[OriginalDatabase]"

à CustomActionData de l'action personnalisée (dans les actions personnalisées d'onglet du projet d'installation) et en lisant la valeur avec ce code dans l'action personnalisée:

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

Questions connexes