如何正确指定DirectorySearch的属性

时间:2016-09-19 11:59:32

标签: installation wix installer

我有一个使用wix bootstrapper的wix安装项目。在安装过程中,引导程序会查找位于引导程序旁边的目录,并将其路径传递给msi,如下所示:

     <MsiPackage Id="The32bitMsi" SourceFile="$(var.SolutionDir)installer\SetupMsiComplete\SetupMsiComplete\bin\x86\release\data.msi" ForcePerMachine="yes" Vital="yes" InstallCondition="NOT VersionNT64">
        <MsiProperty Name="LICFILESOURCEDIR" Value="[WixBundleOriginalSourceFolder]Lic\"/>
     </MsiPackage>

MSI像这样使用MajorUpgrade元素(我只假设这很重要):

    <MajorUpgrade  AllowDowngrades="no" AllowSameVersionUpgrades="no"  DowngradeErrorMessage="Es ist bereits eine neuere Version von [ProductName] installiert." />

我也有一个我初始化的属性:

<Property Id="LICFILESOURCEDIR" Value="unset"/> 

这一点的重点是让引导程序覆盖LICFILESOURCEDIR的值,因为它可用。

接下来,我在目录搜索中使用此属性:

<Property Id="DEMOTAGEXISTS">
    <DirectorySearch Id="CheckFileDir" Path="[LICFILESOURCEDIR]" Depth="0">
      <FileSearch Id="CheckFile" Name="demo.tag" />
    </DirectorySearch>
  </Property>

稍后,我有一个使用DEMOTAGEXISTS作为条件的条件文件副本。因此,请加入&#34; lic&#34;文件夹由引导程序找到,msi将从那里复制文件。

所有这些都有效:我可以使用.exe引导程序安装并使用控制面板卸载。一切都按预期安装/删除。

但是,当我构建新版本的设置(增加版本号)并尝试安装新版本时,我收到以下错误:

> Aktion gestartet um 13:03:54: CostFinalize. MSI (s) (78:70)
> [13:04:22:311]: Produkt: DIE Anwendungen -- Fehler 1606. Auf den
> Netzwerkpfad unset konnte nicht zugegriffen werden.

(基本上,这表示:错误1606 - 无法访问网络驱动器&#39;未设置&#39;)

这是我的假设(请更正我):安装新版本时,使用msi的缓存版本删除以前的版本。出于某种原因,LICFILESOURCEDIR没有为卸载设置。因此,在DirectorySearch期间,名为&#34; unsed&#34;被搜查,显然不可用。因此错误。

基于这个假设,我将LICFILESOURCEDIR的初始值更改为&#34; c:\&#34;。使用这个值,一切似乎都在起作用。

但是,我觉得这不是一个很好的方法。例如:如果有人有奇怪的驱动器号分配,可能没有C:\驱动器,这将使卸载程序变得不可能。

所以问题是:使用&#34;已知有效路径初始化属性的正确方法是什么?并仍然能够从引导程序覆盖该值? (或者我应该按照概述进行,因为C:\&#39;保证可用?)。

0 个答案:

没有答案