我是Wix Toolset安装的新手。我使用的是Wix 3.7和Visual Studio 2010 SP1。
我正在阅读一个使用BootStrapper的教程,其中在Product.Wxs文件中有一个条件消息,用于检查.NET Framework 4.0是否安装了PropertyRef Id变量和条件消息
<PropertyRef Id="NETFRAMEWORK40FULL"/>
<Condition Message="This application requires .NET Framework 4.0. Please install the .NET Framework then run
this installer again.">
<![CDATA[Installed OR NETFRAMEWORK40FULL]]>
</Condition>
如何同样检查Windows XP Starter / Home和Windows 7 Starter / Home / Home Premium版本的条件,并显示安装不支持所列操作系统且需要专业版的条件消息。
我已经浏览了Wixtoolset网站上的链接,但它没有帮助:
http://msdn.microsoft.com/library/aa370556.aspx
我还尝试将条件放在bootstrapper的Bundle.wxs文件中:
<Bundle Name="!(loc.ProductName)" Compressed="yes" Version="1.2.6.0"
SplashScreenSourceFile="Resources\SplashScreen.bmp" IconSourceFile="Resources\IXMWeb.ico" Manufacturer="!
(loc.ManufacturerName)" UpgradeCode="FED377E5-8762-48C4-B123-8D4AD89B0222" Condition="((VersionNT >= v5.1) AND
(ServicePackLevel >= 3) AND NOT(NTSuitePersonal)) OR ((VersionNT >= v5.2) AND (ServicePackLevel >= 2)) OR
(VersionNT >= v6.0 AND NOT(NTSuitePersonal))">
我已经完成了我需要使用NTSuitePersonal而不是MsiNTSuitePersonal来检查该版本是否正在安装的Home版本的帖子。
请告诉我上述使用条件不正确的地方。
答案 0 :(得分:2)
要检查Windows版本(例如Windows XP,Vista,7,8,...),您可以使用VersionNT
- 属性,如您提供的链接中所述。要检查版本(例如Home,Premium,Professional,...),根据this SO-question,您可以使用注册表配置单HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion
下面的值。
与WiX结合使用,您可以进行注册表搜索,设置属性,然后在您的条件中使用此属性(我可以仅在Windows 7 Professional上验证名称为EditionID
的确切注册表项):
...
<Property Id="WINDOWSEDITION" Secure="yes">
<RegistrySearch Id="WindowsEditionReg" Root="HKLM" Key="SOFTWARE\Microsoft\Windows NT\CurrentVersion" Name="EditionID" Type="raw" />
</Property>
...
另见How to: Read a registry entry during installation。
修改:使用链接Operating System Property Values和How To: Read a Registry Entry During Installation以及How To: Block Installation Based on OS Version中指定的媒体资源,检查用户是否拥有Windows 7专业版的示例安装Service Pack 1并拒绝安装其他所有内容(将其放在Product
- 标签内):
<Condition Message="This application can only be installed on Windows 7 Professional with Service Pack 1.">
<![CDATA[Installed OR (VersionNT = 601 AND WindowsBuild > 7100 AND WINDOWSEDITION ~= "Professional")]]>
</Condition>
条件开头的Installed
- 属性可确保仅在尚未安装产品时验证条件。在括号内,我们找到其他条件元素。我们确保在Windows 7(VersionNT = 601 AND WindowsBuild > 7100
)上运行并且版本正确(WINDOWSEDITION ~= "Professional"
)。请注意,~=
检查字符串不区分大小写
对于条件语句的语法,您可以查看here。您当然可以使用OR
,AND
组合任何其他条件,并在适当的位置将它们与括号分组。在现实世界中,您很可能会遇到另一种情况,例如Windows 7及更高版本。