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.
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%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).
%Vor%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:
Das
DetectCondition
ist dann nur"NETFRAMEWORK40"
. Dieser Unterschied könnte die Probleme erklären, die Sie sehen.
Ich benutze das .NET Framework 4.5.2 in dieser Antwort. So schließen Sie .NET Framework als Offline-Installation ein:
Fügen Sie ein PackageGroupRef
-Element in Ihr Chain
:
Fügen Sie das folgende Fragment
hinzu:
Tags und Links wix bootstrapper wix3.7