嘿,伙计们希望有人可以帮我解决这个问题。我试图比较属性的值与手动定义的字符串。 我不确定它是否应该像这样工作,这是我的代码。
<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
答案 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 define
和var
很好。)
您正在使用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的功能,则可以根据引用属性值的表达式启用或禁用功能。