自動安裝驅動程序

原文地址: 自動安裝驅動程序 做者: waterpure
關於驅動程序安裝,只要你細心看了ddk,就應該知道怎樣作
對於即插即用簡單地說要對付2種狀況
1。在你的設備未安裝前,安裝驅動程序這叫預先安裝。
最簡單的方法就是使用SetupCopyOEMInf函數。

具體作法是:
將SetupCopyOEMInf封裝在一個動態庫裏。
用installshield將全部文件copy到一個臨時目錄。
調用動態庫使用SetupCopyOEMInf函數copy臨時目錄下的inf文件(路徑)。
installshield讓計算機重啓。

插上設備,自動識別。

其實在註冊表裏添加東西沒必要大費周張,很簡單,installshield就支持對註冊表的任意修改。沒必要用什麼函數,即改即用,方便。html

還要分:
1。先插入硬件再放入安裝盤,這時安裝程序要能auto run 且能自動更新驅動
2。先放入安裝盤安裝再插入硬件。這時好像是用SetupCopyOEMInf。
windows

 

SetupCopyOEMInf 能夠在Win98下面使用。

1)將inf文件和sys等文件拷貝到相應目錄下面。
而後執行 SetupCopyOEMInf()。這時候,這個函數就會將你的inf文件生成一個pnf文件。
Windows即插即用管理器首先找到pnf文件。
另外,在inf文件中最好不要有copyfile的字段。不然會出現對話框。,
還有,在inf中不使用絕對路徑。這樣,windows尋找文件的時候,就會在本身的目錄下面找了。

我要作一個驅動自動安裝的安裝程序,要在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:windowssystem32driver目錄下的一個對話框。
2.也是最關鍵的:我在c:windowsinf目錄下發現個人.inf文件已成功地轉化爲oem13.inf(我機器裏是oem13,這個數字是不必定的,視機器而定);在c:windowssystem32driver目錄下也發現個人.inf文件,名字沒變。
按理說出現了剛纔的第2點,安裝已經成功,爲何個人驅動還沒法正常工做?設備管理器裏個人設備仍是有個感嘆號,並且點查看驅動詳細信息時,出現該設備沒有安裝驅動。
請問你們各路高手,到底該如何實現驅動的自動安裝?謝謝!!!
 
inf文件放在windows的inf目錄下
sys文件放在system32的drivers目錄下
如今我手上有的資料可使我有兩種安裝方式,一個是經過InstallShield在安裝過程當中經過腳原本調用Devcon來實現安裝;還有一個是經過在腳本中調用rundll32來實現安裝。
順遍提一下,關於INF文件安裝須要調用的函數說明,具體說明請參看Microsoft的MSDN
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/setupapi/setup/installing_from_an_inf_file.asp
編寫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文件,此時可能有低級錯誤
 
主要是用DDK驅動安裝函數根據*.inf文件來安裝驅動: 在win2000及win2000以上系統: a.沒插上設備,安裝驅動: 1.用SetupCopyOEMInf()函數將驅動的安裝文件(*.inf)拷貝到inf目錄中,並自動生成了oem*.inf預安裝文件 2.用msdn中的SetupInstallFilesFromInfSection()函數根據*.inf文件中的安裝段,將相應的驅動文件拷貝到系統中. 3.插上設備,系統會彈出"發現新新的硬件嚮導",只要點擊下一步直至完成便可完成設備的驅動安裝. b.插上設備,安裝驅動: 1.從*.inf文件中    ...    [Manufacturer]     %WinChipHead% = WinChipHead    [WinChipHead]     %CH375.DeviceDesc% = CH375.Install, USBVID_4348&PID_5537     %CH375HM.DeviceDesc% = CH375.Install, USBVID_4348&PID_55E0     ...    獲取hardwareid號USBVID_4348&PID_5537,USBVID_4348&PID_55E0;   2. 用UpdateDriverForPlugAndPlayDevices()自動安裝新驅動! 在98,me系統下:只要將inf文件拷貝到inf目錄下,用SetupInstallFilesFromInfSection函數將驅動文件拷貝到相應的目錄下,更新驅動程序信息,插上設備,系統就會自動安裝驅動.(有個更新驅動信息的辦法,將inf目錄下的drvidx.bin刪掉,插上新設備,系統會自動更新驅動信息). 大致上就是這樣!
相關文章
相關標籤/搜索