Einschließlich .NET Installer im WiX Bundle erkennt nicht, ob bereits installiert

8

Ich bin auf WiX 3.7, und ich kann nicht die einfache & lt; PackageGroupRef Id="NetFx40Web" / & gt; bündeln Sie das Element, damit es funktioniert, da es das Net FX-Installationspaket nicht enthält oder in die Datei setup.exe einbindet. Ich habe in meiner Bundle.wxs -Datei ein eigenes Paket dafür erstellt, aber ich habe immer noch Probleme. Es scheint immer zu versuchen, .NET 4 zu installieren, selbst wenn auf der Maschine bereits .NET installiert ist.

Ich bin mir nicht ganz sicher über den Unterschied zwischen InstallCondition und DetectCondition . Ich denke, InstallCondition wird verwendet, um das Paket zu installieren, wenn die Auswertung wahr ist, andernfalls deinstallieren Sie es. Wie funktioniert das mit Dingen, die typischerweise permanent = yes sind, wie die meisten Voraussetzungen? DetectCondition ist fast das Gegenteil, denke ich, indem es überprüft, ob es bereits auf dem System ist, und wenn ja, es nicht installiert.

Unten ist meine vollständige Bundle.wxs -Datei, die sich in einem Visual Studio WiX Bootstrapper-Projekt befindet. Ich versuche, auf die Registrierung und den Umfang von .NET 4.0 Registrierungsschlüssel zu suchen ist da. Wenn es vorhanden ist, dann möchte ich .NET 4. nicht installieren, und wenn es nicht dort ist, dann installiere es. Dies funktioniert jedoch nicht und es wird immer versucht, .NET zu installieren.

%Vor%

Bootstrapper-Installationsprotokoll:

%Vor%

Update, mit Lösung. Ich habe die eingebaute WiX RegistrySearch verwendet, um festzustellen, ob sie installiert ist. Ich musste auf die WixUtilExtension.dll in meinem Bundle-Projekt verweisen. Hier ist das aktualisierte Bundle.wxs:

%Vor%     
Stealth Rabbi 09.05.2013, 15:55
quelle

2 Antworten

8

Es scheint hier eine Menge Fragen zu geben.

Es klingt wie die Grundfrage, wie man die NETFX-Installation einbindet, die in Ihrem Bundle eingebettet ist. Wenn ja, hast du Recht, dass das WixNetfxExtension das heute nicht unterstützt. Sie müssen Ihre eigene Kopie definieren und Ihre Kopie ist in der Nähe (möglicherweise kopiert von dem, was in src\ext\NetFxExtension\wixlib ist). Das einzige, was Sie ändern müssen, um NETFX in Ihr Bundle zu integrieren, ist, das Attribut ExePackage/@Compressed auf 'yes' zu setzen. Oder Sie können das Compressed -Attribut verlassen und es folgt der Komprimierung Ihres Bundle -Elements (standardmäßig 'yes' ).

Zweitens bestimmt das DetectCondition , ob das Paket auf dem Computer ist. Burn führt die logischen Dinge basierend darauf aus, ob sich das Paket auf dem Computer befindet. Während der Installation installiert Burn beispielsweise das Paket, wenn das Paket nicht vorhanden ist, tut jedoch nichts, wenn das Paket bereits vorhanden ist. Abwesende und permanente Pakete ignorieren natürlich die Deinstallation.

Drittens gibt InstallCondition an, ob das Paket jemals auf dem Computer installiert werden soll. Wenn es als wahr ausgewertet wird, kann das Paket installiert werden (falls nicht vorhanden und zur Installation angefordert). Wenn das Ergebnis falsch ist, wird das Paket entfernt (falls vorhanden).

  

Hinweis: Ihre Registrierungssuche und -bedingungen unterscheiden sich ein wenig von denen, die im WiX-Toolset zur Erkennung von NETFX verwendet werden. Das folgende ist die Erkennung für NETFX das WiX Toolset verwendet:

%Vor%
  

Das DetectCondition ist dann nur "NETFRAMEWORK40" . Dieser Unterschied könnte die Probleme erklären, die Sie sehen.

    
Rob Mensching 09.05.2013, 16:40
quelle
2

Ich benutze das .NET Framework 4.5.2 in dieser Antwort. So schließen Sie .NET Framework als Offline-Installation ein:

  1. Fügen Sie ein PackageGroupRef -Element in Ihr Chain :

    ein %Vor%
  2. Laden Sie das Microsoft .NET Framework 4.5.2 (Offline Installer) und füge es deinem Bootstrapper-Projekt hinzu. (Ich habe es in einen Ordner namens "Resource" gestellt.)

  3. Fügen Sie das folgende Fragment hinzu:

    %Vor%
Chris Schiffhauer 01.05.2015 19:37
quelle

Tags und Links