在安装插件之前检查产品

时间:2015-04-22 00:47:44

标签: windows wix installer

我是Windows Installer XML(WIX Toolset)的新手。我试图弄清楚我的程序是用32位版本还是64位版本安装的。我知道的唯一方法(用我的小知识)是要在程序文件目录中搜索这两个属性(下面)并查看程序是否存在(我会检查注册表,但该程序的安装程序是不要使用Windows注册表。)

<!--Check to see if ImageJ has been installed for 32-bit-->
<Property Id="IMAGEJINSTALLED32">
  <DirectorySearch Id="ProgramFilesSearch"
                   Path="[ProgramFilesFolder]"
                   AssignToProperty="no">
    <DirectorySearch Id="ImageJSearch" Path="ImageJ">
      <FileSearch Id="ImageJEXESearch" Name="ImageJ.exe" />
    </DirectorySearch>
  </DirectorySearch>
</Property>

<!--Check to see if ImageJ has been installed for 64-bit-->
<Property Id="IMAGEJINSTALLED64">
  <DirectorySearch Id="ProgramFiles64Search"
                   Path="[ProgramFiles64Folder]"
                   AssignToProperty="no">
    <DirectorySearch Id="ImageJ64Search" Path="ImageJ">
      <FileSearch Id="ImageJEXE64Search" Name="ImageJ.exe" />
    </DirectorySearch>
  </DirectorySearch>
</Property>

然后检查这些条件

<!--Check for installation-->
<Condition Message="ImageJ is not installed for a 32-bit operating system. You have ImageJ installed with its 64-bit version. Please install this Plugin using the 64-bit version: (URL for 64-bit installer)">
  <![CDATA[Installed OR NOT IMAGEJINSTALLED64 OR IMAGEJINSTALLED32]]>
</Condition>
<Feature Id="CopyFiles" 
         Title="Plugin Installer for ImageJ" Level="1"
         Absent="disallow" AllowAdvertise="no">
  <!--Will run the necessary parts to install the plugin (by copying files to the right directory)-->
</Feature>

当我运行它时,它会检查ImageJ是否仅安装在32位程序文件中,而不是安装在64位程序文件中。如果此检查为true,则会安装插件。这几乎就是我想要的。

我真正需要知道的是我如何处理这两个条件(以及我已经解决的两个条件): 1)如果用户已经安装了32位和64位的程序 2)如果用户根本没有安装该程序。

我尝试过多种情况,但这似乎不起作用。

1 个答案:

答案 0 :(得分:0)

搜索文件位置以检测应用程序位数可能有问题。这是因为将进行检查的应用程序也会有一点(这会影响路径重定向),因此从32位安装程序中,您将无法访问64位文件路径,反之亦然。

更简单的方法是创建一个product code search(我假设您有两个不同的安装程序,一个用于32位,一个用于64位计算机)。如果您有两个不同的安装程序,那么您还应该有两个唯一的product codes