我正在创建一个依赖于正在安装的IIS的安装程序。使用运行安装了Web服务器角色的Windows Server 2008 R2的虚拟机来测试我。
我的安装程序会检查是否使用此条件安装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。
当我重新运行安装程序并登录安装程序日志文件时,IISMAJORVERSION和IISMINORVERSION仍然分别设置了值#7和#5,尽管IIS不再安装。
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问题?
更新1
根据HKLM \ SOFTWARE \ Microsoft \ InetStp文件夹中注册表项MajorVersion和MinorVersion的值填充WIX属性IISMAJORVERSION和IISMINORVERSION。删除Web服务器角色时,实际上只删除了此文件夹中的两个注册表项(MetabaseSetMajorVersion和MetabaseSetMinorVersion)。所有其他的仍然包括WIX使用的两个。
只有在删除Windows进程激活服务后,才会删除HKLM \ SOFTWARE \ Microsoft \ InetStp中的其他注册表项。
考虑到这一点,我不确定使用IISMAJORVERSION并且IISMINORVERSION总是可靠的,因为在没有安装IIS的情况下可以恢复值。