Difxapp安装驱动未执行INF的DefaultInstall区段,如何用原生Wix解决
问题根因
DifxApp框架默认仅适配带硬件ID匹配的即插即用(PnP)驱动,你的驱动属于无关联硬件的非PnP内核驱动,且INF缺失DifxApp要求的必要区段,因此仅会将驱动导入驱动存储,不会触发DefaultInstall执行。
原生WiX配置修正方案
无需自定义操作,按以下要求调整即可直接通过DifxApp完成安装:
- 修正INF文件结构:在现有INF末尾补充
Manufacturer和Models区段,添加一个伪造的硬件ID即可,示例如下:
[Manufacturer] %ManufacturerName%=Standard,NTamd64 [Standard.NTamd64] %DeviceDesc%=MyDriver_Install, Root\MyDriver [Strings] ManufacturerName="Your Company" DeviceDesc="My Kernel Driver"
上述配置是DifxApp识别驱动安装逻辑的必要条件,不会实际绑定硬件设备
- 调整WiX DifxApp配置:将
Legacy属性设为yes,同时将驱动相关文件的Vital属性改为yes,避免安装过程中文件校验异常跳过驱动部署,修正后的配置如下:
<Component Id="DriverComponents" Guid="{someGuid}" Win64="yes"> <difxapp:Driver AddRemovePrograms="yes" DeleteFiles="yes" Legacy="yes" PlugAndPlayPrompt="no" ForceInstall="yes"/> <File Id="MyDriver.inf" Name="MyDriver.inf" Vital="yes" /> <File Id="MyDriver.cat" Name="MyDriver.cat" Vital="yes" /> <File Id="MyDriver.sys" Name="MyDriver.sys" Vital="yes" KeyPath="yes" /> </Component>
ForceInstall="yes"可覆盖驱动存储中同版本驱动的缓存,避免之前的测试残留导致安装失败
- 校验INF区段匹配:确保64位驱动的
DefaultInstall区段带有ntamd64后缀,即DefaultInstall.ntamd64、DefaultInstall.ntamd64.Services等,DifxApp在64位系统下不会执行无平台后缀的DefaultInstall区段,这也是右键安装可以执行、DifxApp不执行的常见差异点:右键安装会自动适配当前平台调用对应区段,DifxApp要求明确指定平台后缀。
验证方法
调整后重新打包安装,查看setupapi.dev.log会出现对应伪造硬件ID的PnP安装日志,DefaultInstall区段的服务注册、注册表修改逻辑会正常执行,卸载时DifxApp也会自动处理驱动卸载、服务清除逻辑,无需额外处理升级、回滚场景。
内容的提问来源于stack exchange,提问作者Ryhor Gunko
相关产品推荐
相关产品推荐

