wzgodzhi
驱动牛犊
驱动牛犊
  • 注册日期2007-01-16
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分760分
  • 威望77点
  • 贡献值0点
  • 好评度76点
  • 原创分0分
  • 专家分0分
阅读:5289回复:16

在INSTALLSHIELD12中用devcon方法制作驱动程序的安装程序步骤

楼主#
更多 发布于:2007-12-04 16:36
 devcon.rar 小弟前面一段时间被老板叫来做驱动的打包,刚开始做的时候无从下手,不知道IS是啥子东东,匆匆忙忙看了一下,在BBS上乱搜了一阵,请教了N多个大虾,在此过程中却遭尽歧视,大多数大虾都不鸟我,可能觉得我的问题太低级了,唉,我也是无可奈何啊,其中还是有一些大虾给予了小弟一些帮助,在此小弟深表感激。但是在此过程中似乎没有一个帖子,一个人能给予一个完整的答案。小弟前几天刚刚搞定老板交代的任务,在此写一下,希望有我以前困惑的XDJM们能够从中获益。
PS:小弟是个菜鸟,写的东东拿不上什么台面,只是自己做的一点点东西,希望那些大虾不要鄙视。
如果有什么高见可以畅所欲言。谢谢!!!
言规正传,小弟打包的是PCI驱动程序,之前老板要求,写了个PCI驱动程序,时候要求我打包。
有两个文件,一个是.inf安装文件,一个是.sys驱动文件,要求是制作一个setup文件,实现驱动程序的自动安装。

之前阅读过qigongwei大虾在03年发的一篇帖子上面介绍了两种方法:
1. 通过在脚本中调用rundll32来实现安装
2. 通过InstallShield在安装过程中通过脚本来调用Devcon来实现安装
刚开始我用第一种方法来做的,主要就是下面3行代码:
Windows 9x
szProgram = \"rundll.exe\";
szCmdLine = \"setupx.dll,InstallHinfSection DefaultInstall 132 \" + SUPPORTDIR + \"test.inf\";
LaunchAppAndWait(szProgram, szCmdLine, WAIT);

Windows NT / 2000
szProgram = \"rundll32.exe\";
szCmdLine = \"setupapi.dll,InstallHinfSection DefaultInstall 132 \" + SUPPORTDIR + \"test.inf\";
LaunchAppAndWait(szProgram, szCmdLine, WAIT);
但是我用这个方法一直没有成功,后来在IS的社区里面看到一个老外发帖说这种方法有时候不起作用,具体好像是由于不是所有INF文件都有defaultinstall安装节的原因,所以我就放弃了这种做法(在这个过程中耗了我将近一个月的时间)。
因此,我就选用了第二种方法,介绍如下:
在网上下载一个DEVCON.EXE文件,小弟在这里提供了,大家可以下载,或者到网站:http://support.microsoft.com/default.aspx?scid=http://support.microsoft..com:80/support/kb/articles/q311/2/72.asp&NoWebContent=1
上面下载,上面还介绍了DEVCON的作用,大家可以参考。
整个过程很简单,就是
1. 在IS12中用向导先生成一些基本的对话框,到最后一步的时候进入脚本编辑界面
(在使用向导的过程中,利用向导将devcon.exe文件和你的.inf文件添加到一个指定的目录,比如system32目录下)
2. 在脚本编辑界面中的脚本结构是:
function OnFirstUIBefore()
......
begin
...
...
...
return 0;
end;
3.在其后面再添加:
function OnFirstUIAfter()
begin
  LaunchAppAndWait(WINSYSDIR^"\\devcon.exe", "install C:\\WINDOWS\\system32\\×××.inf PCI\\VEN_FFFF&DEV_FFFF&SUBSYS_00000000&REV_00", WAIT);
    return 0;
end;

其中第一项WINSYSDIR^"\\devcon.exe"是你DEVCON文件所在位置,可以在向导的Application Files页中将devcon.exe文件和你的INF文件放到一个目录下,然后在这里指出这个路径就可以了(我是将其放到向导Application Files页中的windows\Windows System\下面(这就是WINSYSDIR,也就是system32目录));

第二项中的"install C:\\WINDOWS\\system32\\×××.inf 是你的INF文件的目录,也是用向导事先放到一个指定目录下,我是将其和devcon一起放到了system32目录下(WINSYSDIR);
PCI\\VEN_FFFF&DEV_FFFF&SUBSYS_00000000&REV_00"是你的硬件ID,在INF文件中可以找到,这个ID是在小弟的Manufacturer and Models Sections节中,应该比较好找。

就OK了,再编译生成一个安装文件就可以使用了

由于时间仓卒,其中可能会有些错误,希望各位大虾多多指正。东西很简单,NB的大虾不要鄙视小弟写的浅显,不会的XDJM可借以参考一下,希望能对各位有所帮助。
谢谢!!!
wzgodzhi
驱动牛犊
驱动牛犊
  • 注册日期2007-01-16
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分760分
  • 威望77点
  • 贡献值0点
  • 好评度76点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-12-04 16:37
开头那个devcon.rar点击可以下载
liate
驱动牛犊
驱动牛犊
  • 注册日期2006-03-16
  • 最后登录2007-12-07
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-12-05 17:45
哥们,先谢了。
yuexyy
驱动牛犊
驱动牛犊
  • 注册日期2007-09-26
  • 最后登录2010-12-09
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望151点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-12-25 11:54
可以用install shield的Device Driver Wizard安装inf文件

ps:
szProgram = \"rundll32.exe\";
szCmdLine = \"setupapi.dll,InstallHinfSection DefaultInstall 132 \" + SUPPORTDIR + \"test.inf\";
LaunchAppAndWait(szProgram, szCmdLine, WAIT);
把DefaultInstall换成inf的安装小节名称,应该就可以安装了
lee922@gmail.co
驱动牛犊
驱动牛犊
  • 注册日期2007-07-31
  • 最后登录2010-06-22
  • 粉丝0
  • 关注0
  • 积分39分
  • 威望340点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分1分
地下室#
发布于:2008-01-03 16:59
楼主能加我吗
lee922@gmail.co
驱动牛犊
驱动牛犊
  • 注册日期2007-07-31
  • 最后登录2010-06-22
  • 粉丝0
  • 关注0
  • 积分39分
  • 威望340点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分1分
5楼#
发布于:2008-01-04 15:59
szProgram = \"rundll32.exe\";
szCmdLine = \"setupapi.dll,InstallHinfSection DefaultInstall 132 \" + SUPPORTDIR + \"test.inf\";
LaunchAppAndWait(szProgram, szCmdLine, WAIT);

这几行加在什么地方啊???
chengchet
驱动牛犊
驱动牛犊
  • 注册日期2004-09-27
  • 最后登录2009-04-23
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望15点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-01-05 09:57
学习拉!!!!!!!!!!!
ydh0304
驱动牛犊
驱动牛犊
  • 注册日期2008-01-07
  • 最后登录2008-04-17
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望30点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2008-01-07 14:38
多谢了
hlying
驱动牛犊
驱动牛犊
  • 注册日期2008-01-13
  • 最后登录2008-01-18
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2008-01-15 16:30
请教一下楼主,这个程序能不能用来安装USB驱动,我应用了你的方法结果没出来。*.inf;*.sys文件复制到WINDOWS\LastGood自动创建的新文件夹下,谢谢!
驱动驱动,驱驱动动,一驱就动,不驱不动!
wzgodzhi
驱动牛犊
驱动牛犊
  • 注册日期2007-01-16
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分760分
  • 威望77点
  • 贡献值0点
  • 好评度76点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2008-03-08 16:24
usb的我倒是没试过,不好意思哈

如果有哪位知道可可以分享一下
figure_lin
驱动牛犊
驱动牛犊
  • 注册日期2008-03-21
  • 最后登录2009-08-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2008-03-25 08:17
谢谢,学习中.
ruirui1
驱动牛犊
驱动牛犊
  • 注册日期2007-01-22
  • 最后登录2011-03-25
  • 粉丝0
  • 关注0
  • 积分287分
  • 威望100点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2008-04-16 18:54
太谢谢了,正在弄这个,好人呀!
可以加我么
QQ:513939273
thanfur
驱动牛犊
驱动牛犊
  • 注册日期2007-10-27
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望268点
  • 贡献值0点
  • 好评度39点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2008-07-18 15:00
这个方法我仔细测试过了,PCI设备我没装上,ISA的还可以 ,我想USB也不行
我猜测一般情况PNP设备都不行,非PNP设备可以
具体原因,是因为,PCI设备中需要PNP管理器分配资源,如(中断,IO,内存)。直接调用Install命令是得不到的
在WDK文档里我找到了下面的话,证实了我的猜测
DevCon Install
Creates a new, root-enumerated devnode for a non-Plug and Play device and installs its supporting software. Valid only on the local computer.

devcon [/r] install INFfile HardwareID

请问楼主的PCI设备是怎么装上的?
nonecd
驱动牛犊
驱动牛犊
  • 注册日期2006-08-09
  • 最后登录2010-09-15
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望54点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2008-12-26 16:09
希望多一些这样关注细节的帖子,谢谢啦~~
ILikeDrive
驱动牛犊
驱动牛犊
  • 注册日期2009-04-20
  • 最后登录2009-09-21
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望51点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2009-04-20 14:30
学习一下
、我跟你是同样的任务,但我不想用Install shield来做第二种方法、
用Setup factory7.0可不可以呢
恳请赐教。
wulmg
驱动牛犊
驱动牛犊
  • 注册日期2006-09-14
  • 最后登录2009-10-26
  • 粉丝0
  • 关注0
  • 积分88分
  • 威望89点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2009-07-08 21:24
太好了,去试一下。
wu.dengmao
驱动牛犊
驱动牛犊
  • 注册日期2009-09-07
  • 最后登录2009-10-14
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望51点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2009-09-09 16:50
THX
游客

返回顶部