嘿,我有一个使用WiX构建的MSI,它试图指定仅在安装IIS时才满足的启动条件。这种情况在WS2008 x64上无法正常工作。它适用于我的Windows 7 x64机器。
财产:
<!-- This is used later in a Launch condition. -->
<!-- see http://learn.iis.net/page.aspx/135/discover-installed-components/ -->
<Property Id="IIS7" Value="#0">
<RegistrySearch Id="IIS7W3SVC"
Type="raw"
Root="HKLM"
Key="SOFTWARE\Microsoft\InetStp\Components"
Name="W3SVC" />
</Property>
条件:
<Condition Message="Cannot install. You must install IIS before installing this product.">
NOT IIS56 = "#0" OR NOT IIS7 = "#0"
</Condition>
(IIS6也有一个属性,但这应该与此无关)。
用户报告他看到此“无法安装”消息。他还说IIS已经安装并正常运行。
WS2008是否具有用于IIS存在的不同注册表项? 确定IIS是否存在的首选机制是什么?
这是WIX 3.5。不确定WS2008的确切版本。
可能类似于the issue described here。这个问题尚未解决。
想法?
答案 0 :(得分:30)
为什么不直接使用Wix IIS扩展和IISMAJORVERSION以及IISMINORVERSION?
我们使用它们,我知道它们适用于我们从XP到2008R2使用的每个版本的Windows
<!-- Reference WixIIsExtension in project and pull in property by ref -->
<PropertyRef Id="IISMAJORVERSION"/>
<Condition Message="Install requires IIS 6 or 7.">
<![CDATA[Installed OR (IISMAJORVERSION AND (IISMAJORVERSION = "#6" OR IISMAJORVERSION = "#7"))]]>
</Condition>
答案 1 :(得分:-2)
WIX 3.5不支持检查IIS 7.0及更高版本的IIS版本。
我建议您调用自定义操作来检查IIS版本,然后在此基础上执行操作。
RegistryKey regKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\InetStp");
if (regKey != null)
{
string IISVersion = Convert.ToString(regKey.GetValue("MajorVersion")) + "." + Convert.ToString(regKey.GetValue("MinorVersion"));
}
然后在regKey的基础上设置变量。