2016-07-05 11 views
0

Ich habe eine .wxs Datei für die Programminstallation. Ich möchte einen Teil der Installation abhängig von der OS-Version übergeben (z. B. ausführen, wenn Betriebssystemversion> XP und passiere, wenn < = XP) und weitere Teile installieren. Es bedeutet, dass ich bereits einige Komponenten installiert habe und während der Installation überprüfen möchte (entsprechend dem aktuellen Betriebssystem), ob ich die nächste Komponente installieren soll oder nicht. Wenn ja - installieren, falls nicht - Installation der Komponente sollte übersprungen werden. Natürlich sollte danach die vollständige Installation fortgesetzt werden. Ich möchte die Installation nicht abbrechen und installierte Komponenten entfernen, sondern nur eine Komponente überspringen. Wie kann ich es tun? Auch ich fand dieses link. Es gibt eine Blockinstallation, aber ich möchte die Installation nach der Bedingung fortsetzen. Es gibt eine andere Annahme - wirÜberprüfen Sie den Zustand und setzen Sie die Installation mit Wix Toolset fort.

<?if *condition* ?> ... <?endif?>

Blöcke verwenden können, aber ich verstehe wirklich nicht, wie es OS Informationen zu erhalten. Irgendwelche Ideen?

+0

Sie müssen näher ausführen, was "Ich möchte einen Teil der Installation abhängig von der Betriebssystemversion übergeben (z. B. ausführen, wenn OS verion> XP und passiere wenn <= XP) und weitere Teile installieren." heißt eigentlich. Das ist zu vage. Möchten Sie bestimmte Komponenten installieren? Möchten Sie bestimmte benutzerdefinierte Aktionen ausführen? Was ist in dieser Situation ein "Teil der Installation"? –

+0

@BrianSutherland Danke. Bearbeitet. Ist es jetzt klar? –

+0

Ja =] Ich werde meine Antwort aktualisieren –

Antwort

0

Sie möchten nicht verwenden <?if ... ?> das sind Präprozessordirektiven wie #ifdef und #ifndef in C++ und nur feststellen, ob der Teil zwischen dem if für die Kompilierung enthalten ist oder nicht. Dies wird nur zur gebauten Zeit auf der Build-Maschine ausgewertet.

In diesem Fall wird die Installation unter Windows XP oder früheren Computern nicht ausgeführt.

<Condition Message="!(loc.OSNotSupported)">Installed OR VersionNT &gt; 501 OR VersionNT64 &gt; 501</Condition> 

ähnliche Bedingungen können verwendet werden, zu diktieren, ob eine Komponente installiert ist, wird ein Feature installiert ist, oder eine benutzerdefinierte Aktion ausgeführt wird.

Wenn Sie Ihre Frage aktualisieren und einen Kommentar zu dieser Antwort hinterlassen, werde ich versuchen, meine Antwort zu aktualisieren, um Sie besser zu beantworten.


bestimmte Komponenten, die Sie ganz einfach ausgeführt werden abhängig von den OS der Maschine zu installieren ist, fügen Sie einfach den folgenden Code zu Ihrem <component>

<Component Id="InstallMeOnXP" Guid="*"> 
    <Condition>VersionNT &lt;= 501 OR VersionNT64 &lt;= 501</Condition> 
    <File Id="XPOnly.dll" KeyPath="yes" Source="$(var.BinariesDir)\_bin\XPOnly.dll" /> 
</Component> 

Wenn die Bedingung der Komponente auf TRUE wertet dann wird installiert, sonst wird es nicht installiert. Weitere Informationen über das Element Condition in Wix.

Hier finden Sie die Informationen zu den Standardeigenschaften VersionNT und VersionNT64 für Windows Installer.

+0

Vielen Dank! Ich werde versuchen, das in meinem Fall morgen zu überprüfen. –

+0

Ich möchte nur wissen, was soll ich tun, wenn ich ComponentRef anstelle der üblichen Komponente habe? Wäre die Lösung die gleiche? Ich meine, fügen Sie dem Code in [Schritt 3] eine Bedingung hinzu (http://wixtoolset.org/documentation/manual/v3/howtos/files_and_registry/add_a_file.html) –

+0

Sie können eine ähnliche Bedingung auch auf der Ebene eines Features stellen wenn Sie das Element selbst nicht ändern können.Die Funktion kann angewiesen werden, eine STATEMENT zu installieren oder nicht zu verwenden. Wenn Sie sich die Condition-Seite von wix anschauen, können Sie sie nicht unter verwenden –