1、故障現象
在給單位的一臺Server2008R2 X64服務器上安裝掃描槍的時候發現無法安裝掃描槍驅動,打開設備管理器可以看到掃描槍硬件有黃色歎號標記。錯誤信息如下:
Windows給出的錯誤提示很簡單,“該設備的驅動程序未被安裝。(代碼 28)”,就是安裝驅動程序有錯,但是具體是什麼錯誤,我們從這裏是無法得到的。如果以錯誤提示或者錯誤代碼爲關鍵字上網搜索的話,相信我你一定得不到太多有用的信息。因爲之前另外一臺win7x64上安裝這個掃描槍驅動是沒問題的,所以我知道問題不在驅動本身或者硬件設備上。一開始以爲是操作系統版本問題,但08r2和win7本來就是差不多的,繞了一些彎路後,還是決定從錯誤的根源上找原因。
2、問題分析
上網搜索後,知道驅動安裝會生成系統日誌保持在C:\Windows\inf\setupapi.dev.log\setupapi.dev.log中。打開這個日誌找到相關日誌信息再來分析問題就非常簡單了。這是一個非常值得學習的小技巧,log日誌遠比圖形界面提供的錯誤信息完整並且更有指導意義。如下是setupapi.dev.log中驅動安裝時的相關錯誤信息節選:
inf: Opened INF: 'c:\windows\temp\dmiwu\{de4ae465-6949-463b-9822-287a65fb2b68}\nls_vcp_driver.inf' ([strings])
! inf: Could not find include INF file "layout.inf". Error = 0x00000002
! inf: Unable to load INF: 'C:\Windows\System32\DriverStore\FileRepository\mdmcpq.inf_amd64_neutral_b53453733bd795bc\mdmcpq.inf'(00000003)
! inf: Error 3: The system cannot find the path specified.
! inf: Could not find include INF file "mdmcpq.inf". Error = 0x00000003
相比設備管理器提供的錯誤信息,這裏的日誌足夠清楚了,安裝驅動的時候因爲打不開mdmcpq.inf文件所以驅動安裝無法繼續報錯了。上面一行的layout.inf文件經過分析上下文是不影響安裝進行的,重要的還是缺少mdmcpq這個東西。找到驅動的安裝目錄,在這個掃描槍驅動的inf文件中有如下行:
[VCP_DriverInstall.NT]
Include=mdmcpq.inf
CopyFiles=FakeModemCopyFileSection
AddReg=VCP_DriverInstall.NT.AddReg
3、解決方法
也就是說安裝掃描槍驅動時引用mdmcpq.inf文件,但是安裝時候找不到這個文件,所以出錯了。上網直接搜吧,很容易找到一堆關於mdmcpq缺失的問題。同時也會搜到一些無效的方法,比如複製原版的mdmcpq.inf 和 usbser.sys到system32的inf和drivers目錄。
但是從日誌很明顯知道驅動查找的是C:\Windows\System32\DriverStore\FileRepository\目錄。所以最好的方法還是從正常的系統中直接複製C:\Windows\System32\DriverStore\FileRepository\mdmcpq.inf_amd64_neutral_b53453733bd795bc目錄到故障系統的同位置目錄下,如果複製時提示文件夾沒有訪問權限,給FileRepository目錄增加用戶權限就行了。