http://topic.csdn.net/t/20051220/14/4470178.html
我要做一个驱动自动安装的安装程序,要在XP下安装驱动。
我这里共两个文件,一个.inf,一个.sys。
参考了论坛里几位前辈的贴子,谈论的方法都是在InstallShield里,
在某处(比如OnFirstUIAfter函数)加上如下代码:
//==============================================
//...
string szProgram;
string szCmdLine;
//...
szProgram = "rundll32.exe";
szCmdLine = "setupapi.dll,InstallHinfSection 你要执行的section名 132" + "你的.inf文件所在全路径名";
LaunchAppAndWait(szProgram, szCmdLine, WAIT);
//==============================================
其实InstallShield内部的实现是调用Windows API函数orShellExecuteEx(orShellExecute),
于是我就自己写了个程序来实现如上代码效果,以下是我在MFC里写的代码:
//==============================================
::ShellExecute(NULL, "open", "rundll32.exe",
"setupapi.dll, InstallHinfSection PwSwpDrv.Dev 132 c://driver//pwswpdrv.inf",
"c://driver", SW_SHOWNORMAL);
//==============================================
我的两个文件.inf和.sys放在C盘的自己建的driver目录下。
程序执行的结果是:
1.因为指定了SW_SHOWNORMAL,所以出现了一个将.sys文件拷到c:/windows/system32/driver目录下的一个对话框。
2.也是最关键的:我在c:/windows/inf目录下发现我的.inf文件已成功地转化为oem13.inf(我机器里是oem13,这个数字是不一定的,视机器而定);在c:/windows/system32/driver目录下也发现我的.inf文件,名字没变。
按理说出现了刚才的第2点,安装已经成功,为什么我的驱动还无法正常工作?设备管理器里我的设备还是有个感叹号,而且点查看驱动详细信息时,出现该设备没有安装驱动。
请问大家各路高手,到底该如何实现驱动的自动安装?谢谢!!!
编写INF文件时,参看DDK中"Installation Requirements for Network Protocols"。
如果安装失败,请检查%systemroot%/setupapi.log文件。
假设用NCPA安装INF文件时碰到如下错误信息:
> Error E000020B in UpdateDriverForPlugAndPlayDevices: ERROR_NO_SUCH_DEVINST
> #E154 类别安装程式失败。 错误 0xe0000208: 操作无法在尚未注册的设备信息元素上运行。
请立即用chkinf.bat(DDK自带工具)检查一下INF文件,此时可能有低级错误出现,比
如"AddReg项不在正确的节内"。