如何使用 WIX 静默安装 VC++ 2005 Redistributable x64 和 x86
How to install VC++ 2005 Redistributable x64 and x86 silently with WIX
我正在编辑 WIX 的安装项目(Windows 安装程序 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 安装程序对话框并显示:"Another program is being installed. Please wait until that installation is complete, and then try installing this software again."
好像是两个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 软件许可条款对话框。我想阻止对话框弹出。
欢迎任何建议。谢谢。
以下几乎按你的要求工作:它是无人值守,所以没有许可证查询但它不是完全silent,所以你安装 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 帮助了我。
这些可再发行组件是基于 MSI 的安装。 Windows 不允许递归 MSI 操作,因此在安装它们时会出现错误,因为另一个安装已经准备就绪 运行 - 您正在从中调用自定义操作的安装。
所以这真的归结为 Burn 问题,这应该有效,所以这就是前进的方向,抱歉,我无法帮助解决这部分问题。
我正在编辑 WIX 的安装项目(Windows 安装程序 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 安装程序对话框并显示:"Another program is being installed. Please wait until that installation is complete, and then try installing this software again."
好像是两个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 软件许可条款对话框。我想阻止对话框弹出。
欢迎任何建议。谢谢。
以下几乎按你的要求工作:它是无人值守,所以没有许可证查询但它不是完全silent,所以你安装 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 帮助了我。
这些可再发行组件是基于 MSI 的安装。 Windows 不允许递归 MSI 操作,因此在安装它们时会出现错误,因为另一个安装已经准备就绪 运行 - 您正在从中调用自定义操作的安装。
所以这真的归结为 Burn 问题,这应该有效,所以这就是前进的方向,抱歉,我无法帮助解决这部分问题。