WiX属性ID或条件语句

WiX属性ID或条件语句,wix,Wix,我需要创建一个安装文件来检查注册表中是否有其他软件的版本。目前,我正在注释和取消注释单独安装的代码行。如何将下面的内容转换为条件 <!--<Property Id="ACADREG" Value="ACAD-A001:409" /> Autocad 2012--> <Property Id="ACADREG" Value="ACAD-A004:409" /> <!--Autocad Arch 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],而不是像我上面那样设置它?

您可以使用一个条件:

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

如果定义了AutoCAD Arch 2012,则似乎要重新定义特性,否则请使用AutoCAD 2012。 我有一个类似的问题,我使用了我在这个问题上找到的解决方案


阿卡德罗姆迪鲁拱门酒店
阿卡迪尔拱门

在此之后,您需要的属性将正确地位于ACADDIR和ACADROAMDIR中

这看起来我仍然在创建两个单独的.msi包。我想创建一个.msi文件,以满足两个版本的AutoCAD。不完全是这样,但它只是强制您维护这些属性。我认为你不应该把它复杂化。我已经根据我对你的要求的理解更新了我的答案。这真的不是我想要的。我已经用我的代码更新了我的帖子。我如何有条件地检查每个属性的内容?这取决于。。。您打算如何处理
ACADREG
?像这样的
元素用于从注册表读取信息。然后,您可以根据此属性的值控制执行哪些组件、功能和操作。您可以读取两个版本的软件的注册表,并提供一个屏幕供用户从中选择一个。。。
<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>