相关疑难解决方法(0)

WiX Bootstrapper:如何从命令行设置刻录变量?

使用WiX 3.7和.NET 4.0.

从命令行运行WiX引导程序EXE时,如何设置刻录变量?

command-line wix bootstrapper

16
推荐指数
1
解决办法
1万
查看次数

在MSI中使用[SourceDir]进行WiX自定义操作和刻录

我们的安装程序使用CustomAction(在InstallExecuteSequence中调用)可选地从安装程序旁边的目录中复制用户配置文件.这使用[SourceDir]来定位源目录.

我们目前有32位和64位版本,它们作为单独的.MSI文件分发.我正在尝试使用Burn构建包含这些.MSI文件的单个.EXE.显然当Burn安装了MSI时,它的[SourceDir]位于其他地方(我看到了C:\ProgramData\Package Cache\...路径),所以这个自定义动作不起作用.

我找到了WixBundleOriginalSource变量,但我的问题是我希望MSI文件能够独立工作并与Burn一起打包.我认为我需要有条件地将变量设置为WixBundleOriginalSource(如果已定义(用户使用Burn .exe))或者如果未定义WixBundleOriginalSource(用户直接安装.MSI)则将SourceDir设置为SourceDir,然后将此变量传递给我的自定义操作.(我知道WixOriginalSource是安装程序的完整路径,而不是它所在的目录 - 我可以在我的自定义操作中处理它.)

这可能吗?如果是这样,请帮我解释一下语法.

更新:

我可能会在自定义操作中处理条件部分,并调用它两次:一次使用[SourceDir](直接使用MSI时有效),正如我现在所做的那样:

在我的产品中

    <CustomAction Id='CopyConfigFiles'
                  FileKey="MyInstallationUtility"
                  ExeCommand="COPYFILES [SourceDir]"
                  Execute="deferred"
                  Impersonate="no"
                  Return="ignore" />
Run Code Online (Sandbox Code Playgroud)

......和一次WixBundleOriginalSource.但是,我找不到办法让WixBundleOriginalSource我自定义动作.使用:

                  ExeCommand="COPYFILES [WixBundleOriginalSource]"
Run Code Online (Sandbox Code Playgroud)

......不起作用.使用:

在我的Burn Bundle中

    <WixVariable Id="ConfigFileLocation" Value="[WixBundleOriginalSource]" />
Run Code Online (Sandbox Code Playgroud)

在我的产品中

                  ExeCommand="COPYFILES [ConfigFileLocation]"
Run Code Online (Sandbox Code Playgroud)

......也行不通.两者都给我一个空字符串作为参数.

wix burn

0
推荐指数
1
解决办法
1939
查看次数

标签 统计

wix ×2

bootstrapper ×1

burn ×1

command-line ×1