昨晚老婆拿回来他们公司的一个电脑,说是买了一个联通的的CDMA卡装不上驱动,但是在联通那里就是好的,在我们家的另一个电脑上也可以装上。
我吃完饭就开始折腾它。那是联想的一个PCMCIA卡。最先是怀疑这个机器的PCMCIA槽是不是没有驱动,因为的确不插卡的时候也有一个unknow device。但是松下的网站上根本没有PCMCIA的驱动,也没有chipset的驱动。后来发现这是一个hotkey的设备,就当了一个驱动下来,准备装上。有趣的是,这个设备居然安装不上,快安装完了的时候报错:2: The system cannot find the file specified. 很奇怪,反复安装了几遍,都不行。
后来再去装卡的驱动,联想自带的驱动安装程序比较有意思,插入卡之后,明显看到一些窗口一闪,然后就不见了,系统发出错误的声音,应该是驱动没有被sign的窗口。安装失败它也不报错,好在它还把inf文件放在安装好的目录底下了,这时候windows也能认出那个设备名,叫Lenovo,但是驱动没有装好。手动安装,指定inf文件,果然出没有sign的警告,忽略,到最后一步的时候,居然出跟hotkey那个一样的错误:文件找不到。
有趣的是,出了错误之后,那个设备到是work了,不再有一个问号,联想的CDMA1x拨号程序也能找到这个设备,但是连不上,而且重启之后这个设备又出问题了。
既然文件找不到,我就看看它要找哪个文件——事实证明,这是走了弯路,这个驱动在别的地方是好的,而且松下的hotkey驱动应该也没有问题的。我下了Mark的filemon (File Monitor)程序,来看看它到底要找那个文件。但是在那些NOT FOUND的文件中,却没有发现太多有意义的东西。我也试图把需要的sys文件,dll文件都多复制几份,但是都没有成功。
于是我走了更远的弯路,因为我发现windows安装驱动的程序(rundll32 newdev.dll)会在%windir%下,一般也就是c:\windows下,写一个setupapi.log,里面有详细的如何处理inf文件的记录。察看之。发现inf文件里描述的文件都找到了,并且都已经成功复制了,但是安装快结束的时候,居然就除了那个system cannot find the file specified的错误。hotkey的安装也是一样的。
黔驴技穷,google之,用”install driver system cannot find he file specified”去搜,翻了一翻,还真有人遇到过,他的说法是,HKLM\software\microsoft\windows\currentversion\下,runonce这个键被人给删了,可能是某个特傻缺的uninstaller干的,然而安装驱动的程序往往要在这个RunOnce下面写点东西,并且Open这个registry key不成功的时候,返回值也是2,就是cannot find the file! 解决方法很简单,在那个地方建立一个结点,叫做RunOnce就好了。我一看,果然我那个机器没有这个key!!果然,加上之后,hotkey和卡的驱动都很容易装上了。
最后那个拨号还是不work,我注意到那个卡应该是装两个驱动的,另外一个是一个modem,应该是这个设备没有被安装上,而且不是PnP的。再运行一次联想的安装程序,嗯,搞定。
结论是,知之为知之,不知google之啊!
PS. 如果我不用filemon,而是用更NB的procmon (process monitor)的话,我应该也能自己发现那个RunOnce的问题。Mark Russinovich的确写了一些好tool的。