tigerL
驱动小牛
驱动小牛
  • 注册日期2003-12-24
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望23点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
阅读:9037回复:33

usb驱动自安装程序的制作

楼主#
更多 发布于:2004-11-30 23:27
这两天询问usb驱动安装程序制作的人很多,我有幸做成过一个这样的安装程序。虽然这两天测试也有人回复说还有问题,但我还是对我的安装程序充满信心。

我也曾在本论坛回答过一些朋友的帖子,但回复成功的似乎还没有。这也很正常,毕竟影响安装的因素太多。

我现在简单介绍一下usb驱动安装程序的制作过程,希望能给有这方面需求的朋友一点启示,也希望这方面的大拿能给与批评指正。


1,准备inf和sys
新建一个目录,比如d:\\DrvInstDir,把你写好的inf和sys都放在此目录下。

2,验证你的inf
把系统清理干净,就如同你从来没在这台机器上装过你的驱动程序一样。然后,手工安装你的设备,验证用你的inf是否能正确安装你的sys。注意,这儿有特殊要求,就是在安装过程中,指定了d:\\DrvInstDir为搜寻目录之后,系统就能自动找到sys文件并执行安装,而不会再要求你指定sys文件的位置。如果你的inf满足此要求,则第二步通过;否则请修改你的inf文件,直到它能满足要求为止。

3,编写安装程序
简单做的话,只需调用SetupCopyOEMInf即可。比如:
SetupCopyOEMInf("d:\\\\DrvInstDir\\\\xxxx.inf",NULL,SPOST_PATH,0,NULL,0,NULL,NULL);

4,再次将系统清理干净

5,运行安装程序
SetupCopyOEMInf会在%windir%\\inf目录下生成一个oem*.inf。找找看有没有跟你的inf内容完全一致的oem*.inf,如果有,则成功,可以继续往下走。否则,请退回到前面,察看哪儿出了问题。

6,插上usb设备,验证安装程序是否生效
注意,在2k下,插上usb设备后,如果设备硬件id和inf中的硬件id完全匹配(注意,如果是其他匹配形式,比如设备硬件id匹配inf中的兼容id或者设备兼容id匹配inf中的硬件id,那么我不保证上述方法有效),那么系统会自动将sys文件从d:\\DrvInstDir下复制到%windir%\\System32\\Drivers目录下,并对其进行安装。如果在xp下,且inf和sys没有经过数字签名,那么系统会弹出“发现新硬件”窗口,你只需连续点击窗口上的“下一步”按钮即可完成驱动程序的安装。至于在xp下,如何避免inf和sys未经数字签名时系统弹出“发现新硬件”窗口,并让系统自动完成设备驱动程序的安装,请参考我在本论坛发的“协作安装程序应用一例”一帖。

http://www.driverdevelop.com/forum/viewthread.php?tid=81228


[编辑 -  11/30/04 by  tigerL]

最新喜欢:

xl1533xl1533 viscarviscar
省元坊
lejianz
驱动中牛
驱动中牛
  • 注册日期2003-03-05
  • 最后登录2023-11-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望145点
  • 贡献值0点
  • 好评度116点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2004-12-01 16:10
tigerL大侠真是及时雨啊,我用DEVCON来安装驱动,老是出现问题。后来明白DEVCON可能对没有插入设备而安装驱动会出现10号错误。只好改用修改注册表的方法。原现SetupCopyOEMInf也能实现,太好了。
一起交流,共同提高!
lejianz
驱动中牛
驱动中牛
  • 注册日期2003-03-05
  • 最后登录2023-11-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望145点
  • 贡献值0点
  • 好评度116点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2004-12-01 16:40
赶紧试了一下,我的INF已COPY到WINNT\INF目录下,但插上设备,还是出现发现新硬件的对话框,要求手动安装。不知为什么?
一起交流,共同提高!
blackcourser
驱动牛犊
驱动牛犊
  • 注册日期2004-11-23
  • 最后登录2005-04-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-12-01 16:56
tigerL:
   按你所说:
   1.在干净的系统下,手工安装USB驱动程序能够成功。
   2.恢复干净的系统,调用SetupCopyOEMInf却要求指定*.sys的目录(此时INF目录下已生成和*.inf内容一样的oem3.inf)。我将*.inf和*.sys两文件均拷贝到了同一指定目录下。如d:\DrvInstDir。
   3.按系统要求将*.sys指定到d:\DrvInstDir\下则安装成功。
   能否帮分析一下原因,如何不需用户指定*.sys的路径。
tigerL
驱动小牛
驱动小牛
  • 注册日期2003-12-24
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望23点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-12-01 17:28
tigerL:
   按你所说:
   1.在干净的系统下,手工安装USB驱动程序能够成功。
   2.恢复干净的系统,调用SetupCopyOEMInf却要求指定*.sys的目录(此时INF目录下已生成和*.inf内容一样的oem3.inf)。我将*.inf和*.sys两文件均拷贝到了同一指定目录下。如d:DrvInstDir。
   3.按系统要求将*.sys指定到d:DrvInstDir下则安装成功。
   能否帮分析一下原因,如何不需用户指定*.sys的路径。


第二步你过了吗?
省元坊
tigerL
驱动小牛
驱动小牛
  • 注册日期2003-12-24
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望23点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-12-01 17:28
赶紧试了一下,我的INF已COPY到WINNTINF目录下,但插上设备,还是出现发现新硬件的对话框,要求手动安装。不知为什么?


按我的要求做了吗?
省元坊
tigerL
驱动小牛
驱动小牛
  • 注册日期2003-12-24
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望23点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-12-01 17:54
我说了,影响安装的因素很多,所以你们按我说的去做也不见得就能成功,具体问题还得你们自己具体分析。不过可以肯定的是,USB驱动自安装程序是能够实现的。
省元坊
blackcourser
驱动牛犊
驱动牛犊
  • 注册日期2004-11-23
  • 最后登录2005-04-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-12-02 09:13
tigerL:
   完全按第二步操作,没有问题。
   在干挣的系统下将*.inf和*.sys,拷贝到d:\subkey目录下,插入key,系统要求指定*.inf文件,指定inf文件路径(d:\subkey)后,安装成功,不需再指定*.sys了。
   但在干挣系统下使用SetupCopyOEMInf仍然要指定*.sys。
tigerL
驱动小牛
驱动小牛
  • 注册日期2003-12-24
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望23点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-12-02 14:01
郁闷啊,我可就是这么做成的呀,怎么你们就不行呢?真的希望能听到你们成功的消息!

blackcourser:
能把你的inf贴出来吗?

省元坊
tigerL
驱动小牛
驱动小牛
  • 注册日期2003-12-24
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望23点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-12-02 14:10
blackcourser,
你的inf我已看到,并在你的“预安装usb驱动程序的问题”帖子中给予了回复。
省元坊
lejianz
驱动中牛
驱动中牛
  • 注册日期2003-03-05
  • 最后登录2023-11-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望145点
  • 贡献值0点
  • 好评度116点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于:2004-12-05 23:33
tigerL,读到你发出的有关USB驱动的安装,真是受益非浅。有个问题请教一下,我做了一个触摸屏驱动,在做安装的过程中,我发现在我卸载时在WIN2K后,它要求自动启动,而手动安装却不会。我是用SETUPCOPYOEMINF函数来做的,不知为什么。我看了DDK文档,它也说过这种方法。但我在实验中,我发现这种方法不是总管用,有些时候我用手动安装的方法进行了一次安装,但下次再COPYOEMINF时,再也不能自动安装。不知道这是不是你说的不是干净的系统原因。

另外,我也看到有朋友,用CREATESERVICE的方法,它实现是写注册表,不知道你种方法是否管用。

再次请大侠指教。

一起交流,共同提高!
tigerL
驱动小牛
驱动小牛
  • 注册日期2003-12-24
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望23点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-12-07 20:15
lejianz,如果手动安装不重启就能驱动设备,那么我想用SetupCopyOEMInf做的安装程序也不应该会有问题。系统要求重启我估计是你的inf文件有问题,系统无法为设备找到并安装驱动程序文件。用CreateService的方法也是可以的。
省元坊
lejianz
驱动中牛
驱动中牛
  • 注册日期2003-03-05
  • 最后登录2023-11-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望145点
  • 贡献值0点
  • 好评度116点
  • 原创分0分
  • 专家分0分
  • 社区居民
12楼#
发布于:2004-12-08 00:14
谢谢tigerL,我重新改写了INF文件,能实现利用SetupCopyOEMInf函数来进行在WIN2K下的预自动安装。用CreateService方法我试过,但没有成功。
一起交流,共同提高!
blackcourser
驱动牛犊
驱动牛犊
  • 注册日期2004-11-23
  • 最后登录2005-04-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-12-09 12:21
tigerL
  你好。我的INF文件在2K下可以,在WIN98下安装却出现一黄色感叹号,不知是什么原因?
blackcourser
驱动牛犊
驱动牛犊
  • 注册日期2004-11-23
  • 最后登录2005-04-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-12-09 13:27
TigerL
能谈谈以下两个问题吗?
1. 98ddk,2000ddk,ntddk,xpddk各有什么区别?

2. SetupCopyOEMInf函数的功能是什么?如果仅仅是拷贝*.inf文件到.\INF\下,那么完全可以用其它方法实现呀。



[编辑 -  12/9/04 by  blackcourser]
tigerL
驱动小牛
驱动小牛
  • 注册日期2003-12-24
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望23点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-12-09 22:18
tigerL
  你好。我的INF文件在2K下可以,在WIN98下安装却出现一黄色感叹号,不知是什么原因?


这个可能是INF中AddReg的问题。
省元坊
tigerL
驱动小牛
驱动小牛
  • 注册日期2003-12-24
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望23点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-12-09 22:21
TigerL
能谈谈以下两个问题吗?
1. 98ddk,2000ddk,ntddk,xpddk各有什么区别?

2. SetupCopyOEMInf函数的功能是什么?如果仅仅是拷贝*.inf文件到.INF下,那么完全可以用其它方法实现呀。



[编辑 -  12/9/04 by  blackcourser]


很抱歉,以我目前的水平谈这两个问题,实在是困难!
省元坊
jupitur
驱动牛犊
驱动牛犊
  • 注册日期2002-10-02
  • 最后登录2005-01-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-12-13 10:10
tigerl兄弟:
   目前我遇到了一些比较基础的问题,请问你上述所说的开发工具是什么?我是驱动开发新手,项目比较急,没办法才问如此低级的问题,谢谢你能解答!!!
tigerL
驱动小牛
驱动小牛
  • 注册日期2003-12-24
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望23点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-12-13 23:02
jupitur兄,你的心情我很理解,但一口吃成胖子的事我到目前还从未听说过。Windows驱动程序开发大家基本都用DDK(Driver Development Kit)。安装完DDK后,src目录下有不少驱动实例代码,研究这些代码应该是初学者快速起步的一个方法。
省元坊
szzhuo
驱动牛犊
驱动牛犊
  • 注册日期2005-01-30
  • 最后登录2008-10-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2005-03-13 20:22
win2K下可以,win98下好像不行。
上一页
游客

返回顶部