如何用wix 3.8检测操作系统

时间:2014-06-06 16:25:58

标签: wix installer

我在wix安装程序中添加了一些启动条件。它们包含在单独的文件中,包含以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Fragment>
    <Property Id="LaunchConditions" Value="1"/>   
      <PropertyRef Id="NETFRAMEWORK40FULL"/>
      <Condition Message="You must install Microsoft .NET Framework 4.0 in order to use [ProductName].">
        <![CDATA[Installed OR NETFRAMEWORK40FULL]]>
      </Condition>

     <!--If it is a server, it must be windows server 2003 or higher-->
     <Condition Message="[ProductName] requires Windows Server 2003 or higher.">
       <![CDATA[Installed OR (MsiNTProductType > 1 AND VersionNT >= 502)]]>
     </Condition>

     <!--If it is a workstation, it must be windows vista or higher-->
     <Condition Message="[ProductName] requires Windows Vista or higher.">
       <![CDATA[Installed OR (MsiNTProductType = 1 AND VersionNT >= 600)]]>
     </Condition>
  </Fragment>
</Wix>

但是每次我在Windows 7(终极)x64机器上运行我的设置时,它都会使服务器的状态失效,并且当MsiNTProductType为1时,应该跳过我需要的Windows 2003或更高版本。

Property(C): MsiNTProductType = 1

我正在阅读一本书,因为我正在写这篇文章,虽然他们没有完全相同的样本,但它非常相似,我相信这应该有效,但它并没有#39;吨

有什么想法吗?你能发现什么错吗?

感谢。

亨利

2 个答案:

答案 0 :(得分:1)

因为我想根据我是在处理工作站还是服务器来保留每个条件的个人信息,所以我最终做了以下事情:

  1. 每当我想检查工作站条件时,如果它是服务器则返回true
  2. 每当我想检查服务器条件时,如果它是工作站,则返回true
  3. 所以我的最终代码如下:

    <!--
    Server check condition:
    If workstation, always return true.
    If server, check that it is 2003 or higher.
    -->
    <Condition Message="[ProductName] requires Windows Server 2003 or higher.">
      <![CDATA[Installed OR MsiNTProductType = 1 OR (MsiNTProductType > 1 AND VersionNT > 502)]]>
    </Condition>
    
    <!--
    Client check condition:
    If server, always return true.
    If workstation, check that it is Vista or higher.
    -->
    <Condition Message="[ProductName] requires Windows Vista or higher.">
      <![CDATA[Installed OR MsiNTProductType > 1 OR (MsiNTProductType = 1 AND VersionNT >= 600)]]>
    </Condition>
    

    那就是它。感谢@PhilDW和@DaveAndersen澄清&#34;条件&#34;要求问题!

答案 1 :(得分:0)

Windows 7的产品类型为1,因此中间测试失败。请记住,启动条件需要评估为true才能继续安装,但是中间条件说它需要安装服务器2003,这是错误的方式。

P.S。也许您应该列出它应该安装的确切操作系统类型,因为您在Windows 7上收到错误这一事实并不能真正描述您的要求。