我有一个使用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;保证可用?)。