WiX - 将字符串与<! - ?中的<property>进行比较if? - > <! - ?别的? - >声明

时间:2015-09-11 15:40:34

标签: properties wix

嘿,伙计们希望有人可以帮我解决这个问题。我试图比较属性的值与手动定义的字符串。 我不确定它是否应该像这样工作,这是我的代码。

    <Variable Name="VS2013Installed" />
    <Variable Name="VS2015Installed" />

<!-- Should Search the Registry for the Keys  -->  

<!-- Searches for the Key of Visual Studio 2013 -->    
<Property Id="VS2013" Secure="yes" >    
      <RegistrySearch Id="SEARCH_VS2010" Type="raw" Root="HKCR" Key="VisualStudio.accessor.12.0\shell\Open\ddeexec\Application" >        
      </RegistrySearch>                    
    </Property>

<!-- Searches for the Key of Visual Studio 2015 -->
    <Property Id="VS2015" Secure="yes" >
      <RegistrySearch Id="SEARCH_VS2015" Type="raw" Root="HKCR" Key="VisualStudio.accessor.14.0\shell\Open\ddeexec\Application" >
      </RegistrySearch>
    </Property>

<!-- Should compare the value of the property with the String-->
    <?if [VS2013] = "VisualStudio.12.0" ?>
      <?define VS2013Installed= "1" ?>
    <?else ?>
      <?define VS2013Installed= "0" ?>
    <?endif?>

<!-- Should compare the value of the property with the String-->
    <?if [VS2015] = "VisualStudio.14.0" ?>
      <?define VS2015Installed= "1" ?>
    <?else ?>
      <?define VS2015Installed= "0" ?>
    <?endif?>

<!-- This Condition is only here to get an Message Window with the values of the variables-->
    <Condition Message="$(var.VS2013Installed)$(var.VS2015Installed)">
          <![CDATA[0 = 1 ]]>       
    </Condition>

由于我得到的条件:0,0

2 个答案:

答案 0 :(得分:1)

如果要检测安装了哪些版本的Visual Studio,请查看WiX提供的WixVSExtension,然后使用它提供的属性。

http://wixtoolset.org/documentation/manual/v3/customactions/wixvsextension.html

它包括VS 2013和2015。

答案 1 :(得分:0)

WiX条件编译适用于WiX变量。您需要Windows Installer属性的条件。看起来你有设置属性和使用属性表达式的句柄;只是让它成为所有的属性和条件。 (但是,您使用WiX definevar很好。)

您正在使用WiX工具集构建Windows Installer程序包(.msi文件)。 Windows Installer程序包是一个关系数据库,您可以使用InstEd等工具直观地看到它。 Windows Installer引擎(msiexec)使用数据库为产品上的操作(安装,修复,卸载等)执行标准和自定义操作。操作可以通过Windows Installer属性设置,传递和检索数据。属性通常通过方括号中的名称引用,例如[VS2015]。除了WiX提供的自定义操作(它们可能会或可能不会使用),安装时发生的所有操作都是Windows Installer。

WiX变量只是避免WiX源重复的一种方法。当WiX构建软件包时,它们会被“编译掉”。所以,他们的价值是固定的。 WiX的条件编译(define,if等)也在构建时编译。

在您的代码中,您似乎希望在条件编译语句中使用属性值。在msiexec运行之前,不会设置属性值。因此,您已经找到了另一种使用注册表搜索收集的信息的方法。一种方法可能是,如果您有支持VS2015的功能和支持2013的功能,则可以根据引用属性值的表达式启用或禁用功能。