我有一个使用DriverPackageInstall安装的驱动程序,并在wix安装程序中卸载了DriverPackageUnInstall。如果安装和卸载驱动程序版本为1.0.0.0,则效果很好。
但是当我安装1.0.0.0并升级1.2.0.0时。它可以很好地用1.2.0.0二进制文件代替驱动程序。
但是当我卸载时,未卸载驱动程序,检查日志发现卸载成功的DriverPackageUnInstall返回0,而且logContext.difxError也为0。
无法确定为什么未卸载驱动程序。
<Custom Action='InstallDriverAction'
After='InstallFiles'>NOT Installed</Custom>
<Custom Action='UninstallDriverAction'
After='InstallInitialize'>
Installed AND NOT UPGRADINGPRODUCTCODE</Custom>
其中一个观察结果是 DRVSTORE 中仍然存在1.0.0.0版的driver,cat,inf,并且删除了具有1.2.0.0的驱动程序。
任何帮助将不胜感激。
谢谢
答案 0 :(得分:2)
<Custom Action='UninstallDriverAction' After='InstallInitialize'> Installed AND NOT UPGRADINGPRODUCTCODE</Custom>
条件看起来不对。当前显示“如果已安装,请卸载驱动程序,除非进行重大升级”。您可能想在大型升级期间卸载旧版本的驱动程序,因此应删除AND NOT UPGRADINGPRODUCTCODE
。
该条件的Installed
部分也是错误的。实际上,这将在维修时卸载驱动程序!可以说卸载驱动程序然后再次安装它可能很有用,以期修复一些错误。但是在当前状态下,将不会在修复过程中再次安装驱动程序,因为在获取阶段仅对属性进行一次检查,并且在设置的执行阶段不会对其进行更新。
我的建议:
<Custom Action='InstallDriverAction'
After='InstallFiles'>NOT Installed OR REINSTALL</Custom>
<Custom Action='UninstallDriverAction'
After='InstallInitialize'>
REMOVE~="ALL" OR REINSTALL</Custom>
第一个条件是非常标准的:如果尚未安装驱动程序,则安装驱动程序,或者这是重新安装(也称为修复)。
第二种情况是在以下任何一种情况下,卸载驱动程序:
RemoveExistingProducts
标准操作进行早期排序,以便在安装新版本之前 完全完成现有版本的卸载。使用WiX MajorUpgrade
元素时,默认值为Schedule="afterInstallValidate"
,它就是这样做的。