【发布时间】:2014-07-08 11:46:27
【问题描述】:
我们的安装程序使用 CustomAction(在 InstallExecuteSequence 中调用)来选择性地从安装程序旁边的目录复制用户配置文件。这使用 [SourceDir] 来定位源目录。
我们目前有 32 位和 64 位版本,它们作为单独的 .MSI 文件分发。我正在尝试使用 Burn 构建一个包含这些 .MSI 文件的单个 .EXE。显然,当 Burn 安装 MSI 时,它的 [SourceDir] 位于其他位置(我看到 C:\ProgramData\Package Cache\... 路径),因此此自定义操作不起作用。
我找到了 WixBundleOriginalSource 变量,但我的问题是我希望 MSI 文件在与 Burn 打包时单独工作。我认为我需要有条件地将变量设置为 WixBundleOriginalSource(如果已定义(用户使用 Burn .exe 安装))或 SourceDir(如果未定义 WixBundleOriginalSource(用户直接安装 .MSI)),然后将此变量传递给我的自定义操作。 (我知道 WixOriginalSource 是安装程序的完整路径,而不是它所在的目录 - 我可以在我的自定义操作中处理它。)
这可能吗?如果是这样,请你帮我语法。
更新:
我可以在我的自定义操作中处理条件部分,并调用它两次:一次使用[SourceDir](直接使用 MSI 时有效),就像我现在所做的那样:
在我的产品中
<CustomAction Id='CopyConfigFiles'
FileKey="MyInstallationUtility"
ExeCommand="COPYFILES [SourceDir]"
Execute="deferred"
Impersonate="no"
Return="ignore" />
... 和一次WixBundleOriginalSource。但是,我找不到让WixBundleOriginalSource 给我自定义操作的方法。使用:
ExeCommand="COPYFILES [WixBundleOriginalSource]"
... 不起作用。使用:
在我的刻录包中
<WixVariable Id="ConfigFileLocation" Value="[WixBundleOriginalSource]" />
在我的产品中
ExeCommand="COPYFILES [ConfigFileLocation]"
... 也不起作用。两者都给我一个空字符串作为参数。
【问题讨论】:
-
这个问题的答案似乎可以回答我的最后一个问题:stackoverflow.com/questions/17729878/…