我正在创建一个依赖于正在安装的 IIS 的安装程序。为了进行测试,我使用运行 Windows Server 2008 R2 的虚拟机,该虚拟机安装了 Web 服务器角色。
我的安装程序使用此条件检查是否安装了 IIS;
<PropertyRef Id="IISMAJORVERSION" />
<PropertyRef Id="IISMINORVERSION" />
<Condition Message="Install requires IIS version 7.5 or later">
<![CDATA[Installed OR (IISMAJORVERSION AND ((IISMAJORVERSION = "#7" AND IISMINORVERSION >= "#5") OR IISMAJORVERSION > "#7"))]]>
</Condition>
安装程序按预期运行,但是,我还想通过删除 IIS 并确保安装程序显示条件消息来测试条件。
我通过进入服务器管理器控制台并删除 Web 服务器角色(全部)来删除 IIS。
当我重新运行安装程序并记录安装程序日志文件时,尽管不再安装 IIS,IISMAJORVERSION 和 IISMINORVERSION 仍分别设置为值 #7 和 #5。
AppSearch: Property: IISMAJORVERSION, Signature: IIsMajorVersionSearch
MSI (c) (88:F4) [14:25:16:687]: Note: 1: 2262 2: Signature 3: -2147287038
MSI (c) (88:F4) [14:25:16:687]: PROPERTY CHANGE: Adding IISMAJORVERSION property. Its value is '#7'.
AppSearch: Property: IISMINORVERSION, Signature: IIsMinorVersionSearch
MSI (c) (88:F4) [14:25:16:703]: Note: 1: 2262 2: Signature 3: -2147287038
MSI (c) (88:F4) [14:25:16:703]: PROPERTY CHANGE: Adding IISMINORVERSION property. Its value is '#5'.
安装程序是使用 WIX v3.10.3.3007 构建的。
IIS 卸载是否没有删除它应该删除的注册表项,或者这是一个 WIX 问题?
Update 1
WIX 属性 IISMAJORVERSION 和 IISMINORVERSION 是根据 HKLM\SOFTWARE\Microsoft\InetStp 文件夹中注册表项 MajorVersion 和 MinorVersion 的值填充的。删除 Web 服务器角色时,实际上仅删除了此文件夹中的两个注册表项(MetabaseSetMajorVersion 和 MetabaseSetMinorVersion)。所有其他都保留下来,包括 WIX 使用的两个。
仅当 Windows Process Activation Service 也被删除后,HKLM\SOFTWARE\Microsoft\InetStp 中的其他注册表项才会被删除。
考虑到这一点,我不确定使用 IISMAJORVERSION 和 IISMINORVERSION 是否始终可靠,因为在没有 vlaid IIS 安装时可以取回值。