Идентификатор свойства WiX или условное заявление - PullRequest
5 голосов
/ 23 января 2012

Мне нужно создать установочный файл, который проверит реестр на наличие версии другого программного обеспечения. В настоящее время я комментирую и не комментирую строки кода для отдельных установок. Как я могу превратить нижеследующее в условное?

<!--<Property Id="ACADREG" Value="ACAD-A001:409" /> Autocad 2012--> 
<Property Id="ACADREG" 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="ACADDIR">
    <RegistrySearch Id="AcadLocRegistry" Type="raw" Root="HKLM" Key="SOFTWARE\Autodesk\AutoCAD\[ACADVER]\[ACADREG]" Name="AcadLocation" />
    </Property>

Есть ли способ, которым wiX может установить [ACADREG], читая реестр, а не меняя его, как я делал выше?

Ответы [ 2 ]

1 голос
/ 23 января 2012

Вы можете использовать условие Препроцессор :

<?define AutocadSku = "ACAD2012" ?>

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

Или, что еще лучше, рекомендуется искать оба варианта, чтобы позже можно было условно проверить наличие или содержимое каждого свойства.:

<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 голосов
/ 27 мая 2012

Кажется, что вы хотите переопределить свойство, если определена AutoCAD Arch 2012, в противном случае используйте Autocad 2012. У меня была похожая проблема, и я использовал решение, которое нашел в этом вопросе SO

<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>

После этого требуемые свойства будут правильно отображаться в ACADDIR и ACADROAMDIR

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...