WIX预安装检查:是否已经存在文件夹



我是Wix Toolset的新手,并且正在使用它。试图编程和安装程序,但粘在某个点上,如果存在某些文件/文件夹,则需要在安装之前进行搜索,如果是,则继续暂停该过程。但是我找不到明确的解决方案。这是我的代码。

<Property Id="CHECKPREINSTALLATION">
  <DirectorySearch Path="[ProgramsFilesFolder]"
                   Depth="0"
                   AssignToProperty="no"
                   Id="ProgramFilesFolderSearch">
    <DirectorySearch Path="Notepad"
                     Depth="0"
                     AssignToProperty="no"
                     Id="ComprionFolderSearch">
      <DirectorySearch Path="plugin"
                       Depth="0"
                       AssignToProperty="no"
                       Id="DeviceTestCenterFolderSearch">
      </DirectorySearch>
    </DirectorySearch>
  </DirectorySearch>
</Property>


<Condition Message="Installation requires PLUGIN. Please make sure it is installed."> NOT CHECKPREINSTALLATION</Condition>

如果有人可以以正确的方式提出一些建议。

根据我的经验,目录搜索的路径属性非常挑剔。您应该使用系统文件夹之类的内容,然后只需添加路径而不是嵌套目录搜索标签即可。因此,在您的情况下:

Path="[ProgramFilesFolder]Notepadplugin"

接下来,您可以预先定义属性值。如果找到文件夹,则值将更改为其地址,因此您可以基于条件。完整代码:

<Property Id="CHECKPREINSTALLATION" Value="NOTEXIST" >
      <DirectorySearch Id="ProgramFilesFolderSearch" Depth="0" Path="[ProgramFilesFolder]Notepadplugin" >
      </DirectorySearch>
    </Property>
    <Condition Message="Installation requires PLUGIN. Please make sure it is installed.">
      <![CDATA[CHECKPREINSTALLATION<>"NOTEXIST"]]>
    </Condition>

如果您想在两个文件夹之间选择路径(像我一样),只需使用Double DirectorySearch即可。最新现有文件夹的地址将在属性中使用,例如:

<Property Id="CHECKPREINSTALLATION"  >
      <DirectorySearch Id="ProgramFilesFolderSearch" Depth="0" Path="[ProgramFilesFolder]NotepadfolderA" >
      </DirectorySearch>
 <DirectorySearch Id="ProgramFilesFolderSearch2" Depth="0" Path="[ProgramFilesFolder]NotepadfolderB" >
      </DirectorySearch>
    </Property>

我知道这是旧的问题,不会帮助作者,但是我正在寻找可靠的答案,找不到一个。

看起来好像您在进行文件搜索以确定是否已经安装了某些东西。如果MSI产品安装了某些内容,则还有其他方法可以搜索它(例如,组件GUID,有时是注册表搜索)。也许该文件是您可以运行的标准重新分配的一部分,无论如何它都会做正确的事情。

另一件事是,程序文件文件夹中的搜索很棘手,因为X64机器上有两台,一个是32位,另一台用于64位,因此有混乱的空间。另外,当某人安装产品时,他们可以选择安装文件夹,因此不能保证程序文件是正确的位置。

编辑添加:我没有得到什么。您的设置将文件安装到该程序文件文件夹。但是您的问题是您的安装如何检测先前版本或以前放置的文件夹?这意味着您正在进行某种升级,到那时我会迷路,因为升级只是可行的 - 如果文件已经存在,则它会根据版本规则进行更新。另一方面,如果您安装了完全不同的不是升级的产品,则只需要搜索该文件的组件GUID,它将告诉您是否存在。无论哪种方式,我都不知道如何回答这个问题,因为如果我的分析正确,则不需要搜索。无论哪种方式,文件搜索都可以正常工作,如果找到文件,则它们设置属性,如果您进行安装并创建日志,您将看到正在发生的事情以及是否设置了属性。如果是您想要的文件,请执行文件搜索而不是目录搜索,如果是文件的存在。

最新更新