2012-08-14 15 views
5

Powiel możliwe:
Wix - change the installation folder based on privilegeWiX - Jak ustawić właściwość warunkowo

Dobrze to pytanie arised kiedy starałem się rozwiązać mój problem w How do I get different registry keys for allusers and single user.

Zasadniczo co usiłuję zrobić to:

if ALLUSERS=1 then 
    set InstallDir to Property1 
else 
    set InstallDir to Property2 

Każdy wie to zrobić?

+2

Wygląda na to, że to pytanie zostało [tutaj dokładnie odpowiedział] (http://stackoverflow.com/questions/1017294/wix-change-the-installation-folder-based-on-privilege). – shambulator

Odpowiedz

6

Ok, właśnie skończyłem. Moje wxs wygląda następująco:

<CustomAction Id="PerUserInstall" Property="InstallDir" Value="[INSTALLDIR1]" Execute="immediate" /> 
<CustomAction Id="PerMachineInstall" Property="InstallDir" Value="[INSTALLDIR2]" Execute="immediate" /> 
<InstallExecuteSequence> 
    <Custom Action="PerUserInstall" After="AppSearch">ALLUSERS="" OR (ALLUSERS=2 AND (NOT Privileged))</Custom>  
    <Custom Action="PerMachineInstall" After="AppSearch">ALLUSERS=1 OR (ALLUSERS=2 AND Privileged)</Custom> 
</InstallExecuteSequence> 

Dzięki @shambulator dla łącza. Zauważ, że używam After="AppSearch" zamiast Before="CostFinalize", ponieważ spowoduje to wykonanie akcji tuż po wyszukiwaniu rejestru.

3

Wiele elementów WiX przyjmuje warunek jako tekst wewnętrzny. Ponieważ jest to XML, często musisz unikać specjalnych znaków. Oto wskazówka, w jaki sposób pracować warunki:

Conditional Statement Syntax

Ponadto, nie jestem pewien, dlaczego masz INSTALLDIR1 i INSTALLDIR2. Nie widząc reszty kodu, musiałbym powiedzieć, że nie robisz tego poprawnie. Powinieneś mieć jeden INSTALLDIR, a następnie ustawić go w różnych lokalizacjach w zależności od użytkownika lub maszyny. Oto dobry artykuł napisany na temat:

Authoring a single package for Per-User or Per-Machine Installation context in Windows 7

Osobiście rzadko przeszkadza w instalacje poszczególnych użytkowników. Są to bóle o niewielkiej wartości, inne niż wirusowe (nie wirusy, ale rozprzestrzeniają się za pośrednictwem mediów społecznościowych na użytkowników nieprywatnych).

Powiązane problemy