Features, die an verschiedenen Orten installiert wurden, aber auf dieselben Komponenten verweisen

8

Ich habe ein Produkt, das aus mehreren Funktionen besteht, die an verschiedenen Orten installiert werden können, z. Feature 1 ist eine in Programmdateien installierte ausführbare Datei und Feature 2 ist eine in wwwroot installierte Website. Sowohl Merkmal 1 als auch Merkmal 2 beruhen jedoch auf vielen derselben DLLs und erfordern daher, dass die Komponenten, die diese DLLs enthalten, an 2 verschiedenen Orten installiert werden, abhängig davon, welche Merkmale installiert sind.

Gibt es eine Möglichkeit, dies zu erreichen, ohne jede Komponente zweimal zu definieren?

Um ein weiteres vollständiges Beispiel für das zu liefern, was ich erreichen möchte, kann die folgende vollständige wxs-Datei kompiliert werden mit:

& gt; candle.exe Foobar.wxs

& gt; light.exe -ext WixUIExtension Foobar.wixobj

& gt; msiexec / i Foobar.msi

%Vor%

Dies führt jedoch dazu, dass NUR File1.txt in

installiert wird

C: \ Programme (x86) \ Acme

und NUR File2.txt wird in

installiert

_C: \ Inetpub \ wwwroot \ AcmeWebsite _

Eine Lösung besteht darin, die Komponenten zweimal zu definieren:

%Vor%

Aber was passiert dann, wenn wir ein drittes Feature hinzufügen, das an einem anderen Ort installiert werden soll? Müssen wir dann jedes Bauteil neu definieren? Mit über 100 Komponenten wird die Verwaltung von doppelten Komponenten zu einer großen Aufgabe.

Irgendwelche Vorschläge?

    
Casey 09.02.2011, 05:23
quelle

3 Antworten

14

Sie sehen eine Einschränkung im Windows Installer. Eine Komponente kann nur einmal über ein MSI installiert werden. Jede Komponente kann nur in einem einzigen Verzeichnis installiert werden. Um den Inhalt einer Komponente an zwei verschiedenen Orten zu installieren, müssen Sie entweder eine andere Komponente mit demselben Inhalt erstellen oder versuchen, das Element CopyFile zu verwenden, um den Inhalt zu duplizieren.

Wahrscheinlich nicht, was Sie hören wollten, aber so funktioniert der Windows Installer.

Glücklicherweise, wenn Sie sich für Option 1 entschieden haben, komprimiert das WiX-Toolset den duplizierten Inhalt nur einmal auf die Komponenten. Smart cabbing rocks!

    
Rob Mensching 14.02.2011, 23:00
quelle
1

Ich empfehle, ein separates Feature zu erstellen, das nur die gemeinsamen Komponenten enthält. Es sollte nicht standardmäßig installiert werden. Sie können dann eine benutzerdefinierte Aktion erstellen, die diese Funktion für die Installation nur kennzeichnet, wenn eines Ihrer tatsächlichen Features installiert ist.

Um die Funktion für die Installation zu markieren, können Sie die MsiSetFeatureState-Funktion verwenden: Ссылка

Die benutzerdefinierte Aktion, die dies bewirkt, kann mit der Feature-Aktion Ihrer Features konditioniert werden: Ссылка

    
user527987 09.02.2011 07:17
quelle
0

Features können auf ein Verzeichnis für die Suchfunktion verweisen, aber das bedeutet nur dann etwas, wenn die Komponenten Verzeichnisse verwenden, die dieses Verzeichnis oder ein Kind dieses Verzeichnisses sind. Andernfalls wird die Komponente in das angegebene Verzeichnis wechseln. Mit anderen Worten, Sie könnten INSTALLDIR für das Feature haben und die meisten Komponenten haben noch ANOTHERDIR (sagen Sie [CommonFilesFolder] Company \ Shared für eine andere Komponente und es wird dorthin gehen. Diese Komponente kann dann zu mehreren Features gehören und Sie werden in Ordnung sein.

    
Christopher Painter 09.02.2011 14:48
quelle

Tags und Links