我正在使用WIX创建一个MSI,它需要特定版本的MS VC 2008 x64 Redistributable。 MSI也适用于基于x64的产品。
对于我需要的64位版本的可再发行组件,我有Microsoft vcredist_setup.exe
(我将其重命名为vc90redist_x64.exe
以供我自己参考)。
以下是我用来定义二进制文件的WiX XML:
<Binary Id='_VC_X64_REDIST_' SourceFile='redist\vc90redist_x64.exe' />
<CustomAction Id='_INSTALL_REDIST_'
BinaryKey='_VC_X64_REDIST_'
ExeCommand='/q /l c:\temp\vc.log'
Execute='deferred'
Return='asyncWait' />
注意:我添加了'/ l c:\ temp \ _vc.log'以查看EXE文件是否到达了尝试安装的程度。
注意:我尝试过Return='check'
和Execute='Immediate'
。
并调用自定义操作..
<InstallExecuteSequence>
<Custom Action='_INSTALL_REDIST_' After='InstallFiles'>
NOT Installed
</Custom>
</InstallExecuteSequence>
注意:我尝试过各种After / Before值,而上面的值似乎在日志文件中给出了最好的结果!但仍然没有安装。
当我运行安装MSI文件时,我的产品已安装,但可再发行组件没有安装(即C:\temp\vc.txt
没有创建。如果我之后手动运行可再发行组件,它会提示我安装;那里在“删除程序”列表中没有条目。)
使用上述设置,使用
运行时会得到以下内容'msiexec /i my.msi /l*v log.txt'
以下是日志的摘录(向右滚动以查看完整的行):
Action ended 10:54:27: InstallFiles. Return value 1.
MSI (s) (64:E8) [10:54:27:655]: Doing action: _INSTALL_REDIST_
MSI (s) (64:E8) [10:54:27:655]: Note: 1: 2205 2: 3: ActionText
Action start 10:54:27: _INSTALL_REDIST_.
Action ended 10:54:27: _INSTALL_REDIST_. Return value 1.
...
MSI (s) (64:E8) [10:54:50:905]: Executing op: ActionStart(Name=_INSTALL_REDIST_,,)
MSI (s) (64:E8) [10:54:51:233]: Executing op: CustomActionSchedule(Action=_INSTALL_REDIST_,ActionType=1154,Source=BinaryData,Target=/q /l c:\temp\vc.log,)
...
MSI (s) (64:E8) [10:54:51:889]: Executing op: ActionStart(Name=PublishFeatures,Description=Publishing Product Features,Template=Feature: [1])
MSI (s) (64:E8) [10:54:51:889]: Executing op: FeaturePublish(Feature=Complete,,Absent=2,Component=<VERY LONG BINARY ASCII LOOKING THING>
... 1: _INSTALL_REDIST_ 2: 1631
...
这是日志中最后一次提到_INSTALL_REDIST_。
如何解决此问题?
(我搜索了Stack Overflow和大多数WiX引用和博客,但我还没有成功实现这一目标)