刚刚完成一个任务,开发一款USB驱动的安装程序,这样插入USB设备后,可以自动识别,不必再插入安装盘,查找安装。
.inf和.sys文件是开发好了的,只需要打包发布就可以。搜索了一遍打包工具,然后选了一个最有名的install shield 2009来制作,先是直接拷贝到inf和system32/drivers目录下,结果根本不行。需要执行inf的安装过程才可以。于是,又写了一个script来执行:
- function OnEnd()
- string szCmdLine;
- string szProgram;
- begin
- szProgram = "rundll32.exe";
- szCmdLine = "setupapi.dll,InstallHinfSection DefaultInstall 132 "+"%AppFloder"+"//BulkUsb.inf";
- if (LaunchAppAndWait(szProgram,szCmdLine,WAIT) < 0) then
- MessageBox ("自动安装失败,请手工安装",WARNING);
- return -1;
- endif;
- end;
end;
结果发现,行是行,但是安装程序太华美了,中间的很多dialog又去不掉。于是转而采用setup factory 7.0来作,结果发现,没有办法执行C:/WINDOWS/System32/rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 %1这个windows程序,看来SF7只适合为应用程序打包,不适合打包驱动。
然后又换了INFtool,这个小工具确实看上去比较地道,但是人家要卖钱的,不花钱购买就用不了。
之后又试了几个工具,象windows installer,结果也是要钱,否则就要显示trial字样,晕。而且,也不太适合打包驱动程序。
实在没有办法,只得用VC++6.0来自行开发一款安装程序,专门安装USB类驱动,调用了DDK 2003中提供的setupapi类中的函数。看起来问题才得到较为完满的解决。
总结:本来以为靠打包工具,应该半天时间就可以解决的,结果花了1个星期才搞掂。技术的事情,如果没有做过,是难以准确估量其工作量大小的。