工作的原因打算通過devcon.exe實現自動打包的功能,由于之前一直在Linux那個神奇的世界里遨游,初到Windows這個世界真是茫然失措,
開始之前公司一哥們告訴我想實現什么功能,大概了解一下后就開始了,無奈菜鳥一枚就找度娘解決吧,遨游了兩天找各種資料去了解相關
的概念,可算知道一點了,好了,到重點了:
由于提供了相應的.inf和.sys文件,在Windows自帶的設備管理器中可以正常安裝,但?。?!在devcon中卻安裝出來了兩個驅動文件,
屬于菜鳥的我就在網上一頓神找啊,找到的結果就是安裝命令 devcon -r install D:dbg/PKU_umal.inf "PCI/VEN_100B&DEV_FF2F"
D:dbg/PKU_umal.inf 是我的目錄下文件, "PCI/VEN_100B&DEV_FF2F"設備ID
用這種方法安裝出來會出現兩個驅動,一個好使,一個帶黃色感嘆號;怎么update也不好使。郁悶?。。。∮肿詫W了.inf的原理,一步步
跟下來也沒有錯誤,想是不是國產平臺不行?最后驗證是可以的。用這種方法安裝后只能重啟后再安(我的有C盤保護,要不我得哭),
不重啟只會出現一個帶黃色感嘆號的驅動。
網上找了好多資料也解決不了,終于在今天早上,看了圣經中的一句話,“你若能信,在信的人,凡是都能”,中午沒有午休就找出原因了,
根據源碼慢慢分析發現,在執行devcon -r D:dbg/PKU_umal.inf "PCI/VEN_100B&DEV_FF2F"命令時,是分兩步進行的,第一步執行cmdinstall()
函數進行安裝,在cmdinstall()函數中結尾處又調用了cmdupdate()函數,這個是重點?。。。。mdupdate()函數會再次安裝設備驅動,這就
導致出現了兩個設備驅動的現象,并且還有一個是帶黃色感嘆號的,原來原因就是出現在了cmdupdate()函數中;cmdupdate()函數是由update
命令進行調用的,但只是解決了一半,怎么做???不知道。不知道怎么來了靈感自己組合修改命令,終于試出來啦!
devcon -r rescan D:dbg/PKU_umal.inf "PCI/VEN_100B&DEV_FF2F"
devcon -r update D:dbg/PKU_umal.inf "PCI/VEN_100B&DEV_FF2F"
devcon -r rescan D:dbg/PKU_umal.inf "PCI/VEN_100B&DEV_FF2F"會掃描與ID號相關的設備驅動,即使把網絡控制器刪除也能更新出來
就是這么牛!這個功能相當于設備管理器發現新硬件的功能。
devcon -r update D:dbg/PKU_umal.inf "PCI/VEN_100B&DEV_FF2F"
這句命令折磨了我好久,更新就刷新一下唄!這么理解就錯了,其實主要實現的是具有安裝功能的刷新!
到此為止我的自動驅動安裝還沒出現BUG!
總結一下,有能力還是多看源碼,英文手冊,真的很有用。
“你若能信,在信的人,凡是都能”
新聞熱點
疑難解答