WiX 4.0打包dpInstaller时驱动已安装成功,但返回安装失败
WiX 4.0 Bundle中DPInst驱动安装失败问题排查
我用WiX 4.0和HeatWave Visual Studio扩展构建安装Bundle,用来部署驱动前置程序和主应用。Bundle能正常运行,但其中一个依赖多个文件的DPInst(dpinst64.exe)安装失败,返回模糊错误。
我的WXS配置
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:bal ="http://wixtoolset.org/schemas/v4/wxs/bal"> <Bundle Name="MINEiMiniSetupBundle" Manufacturer="TODO Manufacturer" Version="1.0.0.0" UpgradeCode="ba8f7558-8d8e-497c-95c7-aca4bc5cb362"> <BootstrapperApplication> <bal:WixStandardBootstrapperApplication LicenseUrl="https://www.example.com/license" Theme="hyperlinkLicense" /> </BootstrapperApplication> <Chain> <ExePackage Id="Corel" SourceFile="Drivers\easyvhstodvdv3driverx64_kz06axd1ful.exe" Permanent="yes"/> <ExePackage Id="Phidget" SourceFile="Drivers\phidget22-x64_1.6.20201218.exe" Permanent="yes" /> <ExePackage Id="dpInstaller" SourceFile="Drivers\BBelectronics\Windows\dpinst64.exe" Permanent="yes"> <Payload SourceFile="Drivers\BBelectronics\Windows\DPInst.xml" /> <Payload Name="\.\Drivers\ftdibus.cat" SourceFile="Drivers\BBelectronics\Windows\Drivers\ftdibus.cat" /> <Payload Name="\.\Drivers\ftdibus.inf" SourceFile="Drivers\BBelectronics\Windows\Drivers\ftdibus.inf" /> <Payload Name="\.\Drivers\ftdiport.cat" SourceFile="Drivers\BBelectronics\Windows\Drivers\ftdiport.cat" /> <Payload Name="\.\Drivers\ftdiport.inf" SourceFile="Drivers\BBelectronics\Windows\Drivers\ftdiport.inf" /> <Payload Name="\.\Drivers\ftd2xx.h" SourceFile="Drivers\BBelectronics\Windows\Drivers\ftd2xx.h" /> <Payload Name="\.\Data\eula0409.txt" SourceFile="Drivers\BBelectronics\Windows\Data\eula0409.txt" /> <Payload Name="\.\Data\SideImage.bmp" SourceFile="Drivers\BBelectronics\Windows\Data\SideImage.bmp" /> <Payload Name="\.\Data\TopImage.bmp" SourceFile="Drivers\BBelectronics\Windows\Data\TopImage.bmp" /> <Payload Name="\.\Drivers\i386\ftser2k.sys" SourceFile="Drivers\BBelectronics\Windows\Drivers\i386\ftser2k.sys" /> <Payload Name="\.\Drivers\i386\ftserui2.dll" SourceFile="Drivers\BBelectronics\Windows\Drivers\i386\ftserui2.dll" /> <Payload Name="\.\Drivers\i386\ftcserco.dll" SourceFile="Drivers\BBelectronics\Windows\Drivers\i386\ftcserco.dll" /> <Payload Name="\.\Drivers\i386\ftbusui.dll" SourceFile="Drivers\BBelectronics\Windows\Drivers\i386\ftbusui.dll" /> <Payload Name="\.\Drivers\i386\ftd2xx.dll" SourceFile="Drivers\BBelectronics\Windows\Drivers\i386\ftd2xx.dll" /> <Payload Name="\.\Drivers\i386\ftd2xx.lib" SourceFile="Drivers\BBelectronics\Windows\Drivers\i386\ftd2xx.lib" /> <Payload Name="\.\Drivers\i386\ftdibus.sys" SourceFile="Drivers\BBelectronics\Windows\Drivers\i386\ftdibus.sys" /> <Payload Name="\.\Drivers\i386\ftlang.dll" SourceFile="Drivers\BBelectronics\Windows\Drivers\i386\ftlang.dll" /> <Payload Name="\.\Drivers\amd64\ftser2k.sys" SourceFile="Drivers\BBelectronics\Windows\Drivers\amd64\ftser2k.sys" /> <Payload Name="\.\Drivers\amd64\ftserui2.dll" SourceFile="Drivers\BBelectronics\Windows\Drivers\amd64\ftserui2.dll" /> <Payload Name="\.\Drivers\amd64\ftcserco.dll" SourceFile="Drivers\BBelectronics\Windows\Drivers\amd64\ftcserco.dll" /> <Payload Name="\.\Drivers\amd64\ftbusui.dll" SourceFile="Drivers\BBelectronics\Windows\Drivers\amd64\ftbusui.dll" /> <Payload Name="\.\Drivers\amd64\ftd2xx64.dll" SourceFile="Drivers\BBelectronics\Windows\Drivers\amd64\ftd2xx64.dll" /> <Payload Name="\.\Drivers\amd64\ftd2xx.lib" SourceFile="Drivers\BBelectronics\Windows\Drivers\amd64\ftd2xx.lib" /> <Payload Name="\.\Drivers\amd64\ftdibus.sys" SourceFile="Drivers\BBelectronics\Windows\Drivers\amd64\ftdibus.sys" /> <Payload Name="\.\Drivers\amd64\ftlang.dll" SourceFile="Drivers\BBelectronics\Windows\Drivers\amd64\ftlang.dll" /> <Payload Name="\.\Drivers\Static\amd64\ftd2xx.lib" SourceFile="Drivers\BBelectronics\Windows\Drivers\Static\amd64\ftd2xx.lib" /> <Payload Name="\.\Drivers\Static\i386\ftd2xx.lib" SourceFile="Drivers\BBelectronics\Windows\Drivers\Static\i386\ftd2xx.lib" /> </ExePackage> </Chain> </Bundle> </Wix>
安装日志片段
[5CE0:467C][2023-06-14T10:55:02]i301: Applying execute package: dpInstaller, action: Install, path: C:\ProgramData\Package Cache\367B4EA5A422D7C8FA14832B08DA119C60A43E9B7C493385587DCF69AF6FF42B\dpinst64.exe, arguments: '"C:\ProgramData\Package Cache\367B4EA5A422D7C8FA14832B08DA119C60A43E9B7C493385587DCF69AF6FF42B\dpinst64.exe"' [5CE0:467C][2023-06-14T10:55:08]i366: The process for package: dpInstaller exited with code: 0x200. The exit code has been translated to type: Error and restart: None. [5CE0:467C][2023-06-14T10:55:08]e000: Error 0x80070200: Process returned error: 0x200 [64F8:1D64][2023-06-14T10:55:08]e000: Error 0x80070200: Failed to configure per-machine EXE package. [64F8:1D64][2023-06-14T10:55:08]i319: Applied execute package: dpInstaller, result: 0x80070200, restart: None [5CE0:467C][2023-06-14T10:55:08]e000: Error 0x80070200: Failed to execute EXE package. [64F8:1D64][2023-06-14T10:55:08]e000: Error 0x80070200: Failed to execute EXE package. [5CE0:467C][2023-06-14T10:55:08]i351: Removing cached package: dpInstaller, from path: C:\ProgramData\Package Cache\367B4EA5A422D7C8FA14832B08DA119C60A43E9B7C493385587DCF69AF6FF42B\
问题分析与修复方案
1. DPInst调用参数缺失
从日志能看到,WiX调用dpinst64.exe时没有附加任何参数,而DPInst需要明确参数才能正确工作。比如:
/sw:静默安装,不显示UI/path .:指定当前目录为驱动搜索路径/install:明确执行安装操作
修改ExePackage节点,添加必要参数:
<ExePackage Id="dpInstaller" SourceFile="Drivers\BBelectronics\Windows\dpinst64.exe" Permanent="yes" Arguments="/sw /path ." />
2. Payload路径格式错误
当前Payload的Name属性使用了\.\Drivers\...这种无效的相对路径写法,WiX会把Payload解压到dpinst64.exe的同目录下,正确的相对路径应该直接对应原文件的目录结构,去掉\.\前缀。比如:
<!-- 错误写法 --> <Payload Name="\.\Drivers\ftdibus.cat" SourceFile="Drivers\BBelectronics\Windows\Drivers\ftdibus.cat" /> <!-- 正确写法 --> <Payload Name="Drivers\ftdibus.cat" SourceFile="Drivers\BBelectronics\Windows\Drivers\ftdibus.cat" />
所有Payload的Name都需要调整为这种相对路径,确保DPInst能找到驱动文件和配置。
3. 工作目录配置
可以给ExePackage添加WorkingDirectory="Payload",确保DPInst在Payload解压后的目录中运行,避免路径查找错误:
<ExePackage Id="dpInstaller" SourceFile="Drivers\BBelectronics\Windows\dpinst64.exe" Permanent="yes" Arguments="/sw /path ." WorkingDirectory="Payload">
4. 错误码0x200的具体含义
0x200是DPInst的专属错误码,通常表示:
- 找不到指定的驱动包
- DPInst.xml配置文件路径错误或内容无效
- 驱动文件没有有效的数字签名(Windows 10/11默认强制要求驱动签名)
额外检查步骤
- 手动运行解压后的dpinst64.exe,观察是否有弹窗提示具体错误,这比WiX日志更直观
- 检查DPInst.xml的内容,确认其中的
<SearchPath>等配置和实际解压后的路径一致 - 验证驱动文件的数字签名是否有效,若系统开启驱动签名强制,未签名驱动会安装失败
内容的提问来源于stack exchange,提问作者Rej Fredericks
相关产品推荐
相关产品推荐

