WIX制作含2个inf文件的相机驱动安装包difx:Driver报错如何解决
WiX打包多inf相机驱动报错CNDL0207的解决办法
报错根因
该报错本质不是你编写的单个Component内存在多个difx:Driver节点,而是两个Component指向同一个输出目录MyCamModuleDir,且都包含同名文件wdfcoinstaller01011.dll。WiX打包时会自动将同路径、同名的文件合并到同一个Component中,合并后的Component就携带了两个difx:Driver节点,因此触发校验报错。
解决方案
方案1:拆分不同驱动的输出目录(推荐)
将两个驱动的文件输出到不同的子目录,避免同名文件路径冲突,无需改动本地源码结构,仅调整WiX配置即可:
- 先在项目的Directory定义段新增两个子目录节点:
<Directory Id="MyCamModuleDir" Name="MyCam"> <Directory Id="Driver1Dir" Name="USBX64" /> <Directory Id="Driver2Dir" Name="CabUSBX64" /> </Directory>
- 修改两个ComponentGroup的Directory属性对应到新的子目录,其余内部配置保持不变:
<ComponentGroup Id="MyCamDriver1" Directory="Driver1Dir" Source="modules\system\camera\myCam\USBX64"> <!-- 原有Component内部配置不改动 --> </ComponentGroup> <ComponentGroup Id="MyCamDriver2" Directory="Driver2Dir" Source="modules\system\camera\myCam\CabUSBX64"> <!-- 原有Component内部配置不改动 --> </ComponentGroup>
方案2:抽取公共依赖为独立组件
如果要求两个驱动的文件必须输出到同一个目录,可以把公共依赖wdfcoinstaller01011.dll单独拆为独立Component,从两个驱动的Component中移除该文件的配置:
<!-- 公共依赖组件,需生成新的唯一GUID --> <ComponentGroup Id="MyCamDriverCommon" Directory="MyCamModuleDir"> <Component Guid="生成新的唯一GUID" Win64="$(var.Win64)"> <File Name="wdfcoinstaller01011.dll" KeyPath="yes" /> </Component> </ComponentGroup> <!-- 驱动1组件,移除wdfcoinstaller01011.dll配置 --> <ComponentGroup Id="MyCamDriver1" Directory="MyCamModuleDir" Source="modules\system\camera\myCam\USBX64"> <Component Guid="7A259B3A-E41F-460F-8311-03CD89D9A7C5" Win64="$(var.Win64)"> <File Name="myCamusbX64.inf" KeyPath="yes" /> <File Name="myCamusbX64.sys" /> <File Name="myCamusbX64.cat" /> <difx:Driver DeleteFiles="yes" Legacy="yes" AddRemovePrograms="no" PlugAndPlayPrompt="no" /> </Component> </ComponentGroup> <!-- 驱动2组件,移除wdfcoinstaller01011.dll配置 --> <ComponentGroup Id="MyCamDriver2" Directory="MyCamModuleDir" Source="modules\system\camera\myCam\CabUSBX64"> <Component Guid="91E30F1E-1C53-49FB-B31E-273CD43120BD" Win64="$(var.Win64)"> <File Name="myCamcabusbX64.inf" KeyPath="yes" /> <File Name="myCamcabusbX64.sys" /> <File Name="myCamcabusbX64.cat" /> <difx:Driver DeleteFiles="yes" Legacy="yes" AddRemovePrograms="no" PlugAndPlayPrompt="no" /> </Component> </ComponentGroup>
最后将公共组件MyCamDriverCommon加入到你的Feature引用列表即可正常打包。
内容的提问来源于stack exchange,提问作者Hans
相关产品推荐
相关产品推荐

