2012-01-23 7 views
5

Potrzebuję utworzyć plik instalacyjny, który sprawdzi rejestr dla wersji innego oprogramowania. Aktualnie komentuję i odznaczam linie kodu dla osobnych instalacji. Jak mogę zamienić poniższe warunki w warunkowe?Identyfikator właściwości WiX lub instrukcja warunkowa

<!--<Property Id="ACADREG" Value="ACAD-A001:409" /> Autocad 2012--> 
<Property Id="ACADREG" Value="ACAD-A004:409" /> <!--Autocad Arch 2012--> 

Potrzebuję również uzyskać wersję, która ma być później w instalacji.

<Property Id="ACADROAMDIR"> 
    <RegistrySearch Id="ROAMROOTDIR" Root="HKCU" Type="raw" Key="Software\Autodesk\AutoCAD\[ACADVER]\[ACADREG]" Name="RoamableRootFolder" /> 
    </Property> 


    <Property Id="ACADDIR"> 
    <RegistrySearch Id="AcadLocRegistry" Type="raw" Root="HKLM" Key="SOFTWARE\Autodesk\AutoCAD\[ACADVER]\[ACADREG]" Name="AcadLocation" /> 
    </Property> 

Czy istnieje sposób można ustawić Wix [ACADREG] czytając rejestru zamiast mnie ustawienie go tak jak ja powyżej?

+0

'' element jest używany do odczytu informacji z rejestru. Następnie możesz kontrolować, które składniki, funkcje i działania są wykonywane w zależności od wartości tej właściwości. –

+0

Możesz czytać rejestr obu wersji oprogramowania i wyświetlać ekran wyboru użytkownika ... – vinay

Odpowiedz

1

Można użyć Preprocessor warunek:

<?define AutocadSku = "ACAD2012" ?> 

<?if $(var.AutocadSku) = "ACAD2012" ?> 
    <Property Id="ACADREG" Value="ACAD-A001:409" /> 
<?else?> 
    <Property Id="ACADREG" Value="ACAD-A004:409" /> 
<?endif ?> 

Albo jeszcze lepiej, najlepszą praktyką jest poszukiwanie zarówno, więc później na was mógłby warunkowo sprawdzenia istnienia lub treści poszczególnych właściwości:

<Property Id="ACADROAMROOTDIR"> 
    <RegistrySearch Id="ROAMROOTDIR" Root="HKCU" Type="raw" Key="Software\Autodesk\AutoCAD\R18.2\ACAD-A001:409" Name="RoamableRootFolder" /> 
</Property> 
<Property Id="ACADROAMARCHROOTDIR"> 
    <RegistrySearch Id="ARCHROAMROOTDIR" Root="HKCU" Type="raw" Key="Software\Autodesk\AutoCAD\R18.2\ACAD-A004:409" Name="RoamableRootFolder" /> 
</Property> 
+0

Wygląda na to, że nadal będę tworzył dwa oddzielne pakiety .msi. Chcę utworzyć jeden plik .msi, który będzie obsługiwał obie wersje programu AutoCAD. – Robert

+0

Nie, ale to tylko zmusza do zachowania tych właściwości. Myślę, że nie powinieneś tego zbytnio komplikować. Zaktualizowałem swoją odpowiedź zgodnie z moim zrozumieniem Twojego wymagania. – KMoraz

+0

To naprawdę nie jest to, czego szukałem. Zaktualizowałem swój post z wyglądem mojego kodu. – Robert

0

Wygląda na to, że chcesz ponownie zdefiniować właściwość, jeśli zdefiniowano AutoCAD Arch 2012, w przeciwnym razie użyj programu Autocad 2012. Miałem podobny problem i użyłem rozwiązania, które znalazłem w tym SO question

<Property Id="ACADREG" Value="ACAD-A001:409" /> <!-- Autocad 2012--> 
<Property Id="ACADREG_ARCH" Value="ACAD-A004:409" /> <!--Autocad Arch 2012--> 


<Property Id="ACADROAMDIR"> 
<RegistrySearch Id="ROAMROOTDIR" Root="HKCU" Type="raw" Key="Software\Autodesk\AutoCAD\[ACADVER]\[ACADREG]" Name="RoamableRootFolder" /> 
</Property> 

<Property Id="ACADROAMDIR_ARCH"> 
<RegistrySearch Id="ROAMROOTDIR" Root="HKCU" Type="raw" Key="Software\Autodesk\AutoCAD\[ACADVER]\[ACADREG_ARCH]" Name="RoamableRootFolder" /> 
</Property> 

<Property Id="ACADDIR"> 
<RegistrySearch Id="AcadLocRegistry" Type="raw" Root="HKLM" Key="SOFTWARE\Autodesk\AutoCAD\[ACADVER]\[ACADREG]" Name="AcadLocation" /> 
</Property> 

<Property Id="ACADDIR_ARCH"> 
<RegistrySearch Id="AcadLocRegistry" Type="raw" Root="HKLM" Key="SOFTWARE\Autodesk\AutoCAD\[ACADVER]\[ACADREG_ARCH]" Name="AcadLocation" /> 
</Property> 

<SetProperty Id="ACADROAMDIR" After="AppSearch" Value="[ACADROAMDIR_ARCH]"> 
ACADROAMDIR_ARCH 
</SetProperty> 

<SetProperty Id="ACADDIR" After="AppSearch" Value="[ACADDIR_ARCH]"> 
ACADDIR_ARCH 
</SetProperty> 

Po tym, właściwości chcesz być poprawnie w ACADDIR i ACADROAMDIR