我正在编辑WIX的安装项目(Windows Installer XML),并希望使用WIX静默安装VC ++ Redistributables(2005x86,2005x64)。
我在下面显示的代码中使用自定义操作:
<Product ...>
<CustomAction Id="vcredist2005x64" ExeCommand="/q" Execute="deferred"
Return="asyncNoWait" Impersonate="no">
<CustomAction Id="vcredist2005x86" ExeCommand="/q" Execute="deferred"
Return="asyncNoWait" Impersonate="no">
</Product>
...
<Fragment>
<InstallExecuteSequence>
<Custom Action="vcredist2005x64" Before="InstallFinalize">NOT Installed</Custom>
<Custom Action="vcredist2005x86" After="vcredist2005x64">NOT Installed</Custom>
</InstallExecuteSequence>
</Fragment>
然后,执行从上面的代码生成的安装程序时,会弹出一个Windows Installer对话框并说:&#34;正在安装另一个程序。请等待安装完成,然后再次尝试安装此软件。&#34;
似乎两个Redistributables是冲突的(请注意,在执行时,例如,2013x64和2005x64,不会发生冲突,它们会以静默方式安装)。
然后我切换到使用Bootstrapper Project(Burn)并编写下面的代码:
<Bundle ...>
<Chain>
<ExePackage Id="vcredist2005x64" SourceFile="C:\path\to\vcredist_x64.exe"/>
<ExePackage Id="vcredist2005x86" SourceFile="C:\path\to\vcredist_x86.exe"/>
</Chain>
</Bundle>
...
<Fragment>
<PackageGroup Id="vcredist">
<ExePackage Id="vcredist2005x64"
Cache="yes" PerMachine="yes" Permanent="yes" Vital="yes" Compressed="yes"
SourceFile="C:\path\to\vcredist_x64.exe"
InstallCommand="/q"
SuppressSignatureVerification="yes"
Protocol="burn"
/>
<ExePackage Id="vcredist2005x86" ... /> <!-- same as above -->
</PackageGroup>
</Fragment>
使用Burn时,不会发生冲突,但无法安装静默,即启动Bootstrapper后,会出现Microsoft软件许可条款对话框。我想阻止对话框弹出。
欢迎任何建议。谢谢。
答案 0 :(得分:0)
以下几乎正如您所说的那样:它是无人值守,因此没有许可证查询但是它不是完全无声,因此您在安装VS2005依赖项时会简要地看到弹出窗口。可能会进一步增强,但转换似乎没有得到适当的尊重。
无论如何,首先使用7-Zip或其他软件解压缩vcredist_x86.exe
(或x64)以检索内部VCREDI~3.EXE
。删除原始文件并将后者重命名为vcredist_x86.exe
(或x64)。使用此WiX套装后:
<Bundle>
<!-- ... -->
<Chain>
<ExePackage Id="vcredist2005x86" SourceFile="D:\vcredist_x86.exe"/>
</Chain>
</Bundle>
<Fragment>
<PackageGroup Id="vcredist">
<ExePackage Id="vcredist2005x86"
Cache="yes" PerMachine="yes" Permanent="yes" Vital="yes" Compressed="yes"
SourceFile="D:\vcredist_x86.exe"
InstallCommand="/Q /C:"msiexec /i vcredist.msi /qn""
SuppressSignatureVerification="yes"
Protocol="burn"
/>
</PackageGroup>
</Fragment>
这link帮助了我。
答案 1 :(得分:0)
这些可再发行组件是基于MSI的安装。 Windows不允许递归MSI操作,因此您在安装它时会收到错误,因为另一个安装已经运行 - 您可以从中调用自定义操作。
所以这真的归结为一个Burn问题,那应该是有效的,这样才能进入,抱歉我无法帮助解决这个问题。