用installshield制作驱动安装包

用installshield制作对于即插即用的驱动安装包简单地说要对付2种情况

1、在你的设备未安装前,安装驱动程序这叫预先安装。

最简单的方法就是使用SetupCopyOEMInf函数。具体做法是:

  1. 将SetupCopyOEMInf封装在一个动态库里。
  2. 用installshield将所有文件copy到一个临时目录。
  3. 调用动态库使用SetupCopyOEMInf函数copy临时目录下的inf文件(路径)。
  4. installshield让计算机重启。
  5. 插上设备,自动识别。

2、你的设备已安装,弹出安装向导。

很简单,让用户搜索你的安装盘,即可完成安装。
devcon dp_add调用SetupCopyOEMInf做了预安装


wdk文档中关于预安装的一段话
我刚开始以为预安装就是直接把驱动安上,白痴似的把驱动直接安上了,然后我机子上面之前的驱动没卸干净,添上设备后直接能用,偶就把安装程序当成一个版本交了,囧。。。

安装时直接把inf文件拷windows\inf下,卸载时删除,防止被命名成oem*.inf,在某种情况下发生重复预注册,同时也便于卸载时删除inf文件。

注:驱动预安装

最近实现驱动预安装的脚本,即在安装软件时候,将驱动文件安装一起安装上,从而达到安装后,插入设备可以直接使用的目的,以下是具体脚本,共享给需要的人参考

注:

  • XP系统下,当插入设备,会提示发现新硬件,只要点击自动搜索,即可
  • Windows 7下直接插入设备即可

1.声明一个prototype

prototype BOOL Setupapi.SetupCopyOEMInfA(POINTER, POINTER, POINTER, POINTER, POINTER, POINTER, POINTER, POINTER);

2.使用SetupCopyOEMInfA实现驱动预安装

SourceUSB2InfFileName = WINDIR^”inf\\Motic Drivers\\USB2 Camera\\MoticUSB2Camera.inf”;
UseDLL(“Setupapi.dll”);
SetupCopyOEMInfA(&SourceUSB2InfFileName, NULL, 1, NULL, NULL, 0, NULL, NULL);
UnUseDLL(“Setupapi.dll”);

3.遗留问题:

以上这个方法,已经可以实现驱动预安装,但安装过程会弹出数字签名认证窗口,每次都要点“继续安装”,还没找到屏蔽掉这个窗口的方法,不知道是否有人知道如何屏蔽或隐藏掉这个窗口?

 

此条目发表在 Linux驱动开发 分类目录,贴了 , , 标签。将固定链接加入收藏夹。

发表评论