我正在使用Wix创建一个安装程序,该安装程序将在用户的PC上搜索目录并在该目录中安装相关的应用程序。例如,我需要安装到文件夹ProductA\Utilities
,其位置超出了我的控制范围。
为实现这一目标,我尝试了以下方法:
<Property Id="UTILITIES_DIR">
<DirectorySearch Id="FindUtilsDir" Path="ProductA\Utilities"/>
</Property>
<Directory Id="TARGETDIR" Name="SourceDir">
<!-- WiX requires me to use a special folder at some point -->
<Directory Id="ProgramFilesFolder" Name="ProgramFiles">
<Directory Id="UTILITIES_DIR">
<Directory Id="INSTALLFOLDER" Name="MyUtility"/>
</Directory>
</Directory>
</Directory>
当我通过双击运行安装程序时,这一切都运行良好,但是,当我通过msiexec.exe运行安装程序时,找到了UTILITIES_DIR
,但在之后立即覆盖:
从日志文件:
MSI (c) (C0:0C) [16:49:34:064]:
PROPERTY CHANGE: Adding TARGETDIR property. Its value is 'F:\'.
MSI (c) (C0:0C) [16:49:34:064]:
PROPERTY CHANGE: Modifying ProgramFilesFolder property.
Its current value is 'C:\Program Files (x86)\'. Its new value: 'F:\ProgramFiles\'.
MSI (c) (C0:0C) [16:49:34:064]:
PROPERTY CHANGE: Modifying UTILITIES_DIR property.
Its current value is 'C:\ProductA\Utilities'. Its new value: 'F:\ProgramFiles\'.
值得注意的是,我的机器上的F:\是C:\的部分网络共享,它报告与C:\完全相同的可用空间,所以我似乎得到了很幸运,当直接运行.msi并且TARGETDIR设置为C:\时,但是当从msiexec运行时,TARGETDIR被设置为F:。
有没有办法找到可能在任何根目录中的特定目录?
答案 0 :(得分:0)
您可以将SourceDir设置为WindowsVolume。所以它不会再改变了。
<SetDirectory Id="SourceDir " Value="[WindowsVolume]" />