我是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)如果用户根本没有安装该程序。
我尝试过多种情况,但这似乎不起作用。
答案 0 :(得分:0)
搜索文件位置以检测应用程序位数可能有问题。这是因为将进行检查的应用程序也会有一点(这会影响路径重定向),因此从32位安装程序中,您将无法访问64位文件路径,反之亦然。
更简单的方法是创建一个product code search(我假设您有两个不同的安装程序,一个用于32位,一个用于64位计算机)。如果您有两个不同的安装程序,那么您还应该有两个唯一的product codes。