使用Cutom安装驱动程序Action DriverPackageInstall在wix安装程序中

时间:2018-07-17 15:01:02

标签: wix

我有一个使用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的驱动程序。

任何帮助将不胜感激。

谢谢

1 个答案:

答案 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",它就是这样做的。
  • 在重新安装期间(也称为修复)。我尚不确定这是否是个好主意,请参阅下面的评论。