2012-07-25 93 views
3

我想在Windows安裝過程中安裝第三方libusb驅動程序。我使用Visual創建了這個安裝  Studio   2010.使用INF文件安裝libusb驅動程序C#

我已經嘗試通過命令行使用SetupAPI和DifXAPI來安裝此驅動程序,但沒有任何反應。我希望有一個窗口彈出,說明它是一個未簽名的驅動程序,並且您必須單擊確定繼續。我有這個窗口彈出的唯一方法是如果我使用C#控制檯應用程序和P/Invoke調用DifXApi的驅動程序安裝代碼(指向INF文件,它看起來像是通過inf-wizard生成的),並且需要該項目爲x64構建(我需要這個也適用於32位安裝程序)。點擊確定後,驅動程序從未安裝。

此驅動程序正確安裝的唯一方法是如果我通過USB插入硬件,右鍵單擊未知設備並瀏覽到包含驅動程序DLL文件,sys文件和INF文件的文件夾。 Windows如何確定如何安裝驅動程序?

INF文件具有32位/ 64位/ Itanium驅動程序部分,但Windows如何知道要安裝哪個部分,以及Windows在做什麼不同,以至於我處於命令行?

回答

1

我能夠使用以下代碼在32位和64位Windows上安裝驅動程序,其中​​是INF文件的路徑,devices是與USB設備關聯的所有設備ID的列表:

[DllImport("setupapi.dll")] 
public static extern bool SetupCopyOEMInf(
    string SourceInfFileName, 
    string OEMSourceMediaLocation, 
    int OEMSourceMediaType, 
    int CopyStyle, 
    string DestinationInfFileName, 
    int DestinationInfFileNameSize, 
    int RequiredSize, 
    string DestinationInfFileNameComponent 
    ); 

[DllImport("newdev.dll")] 
public static extern bool UpdateDriverForPlugAndPlayDevices(
    IntPtr hwndParent, 
    string HardwareId, 
    string FullInfPath, 
    uint InstallFlags, 
    bool bRebootRequired 
    ); 

[STAThread] 
static void Main() { 
    if (SetupCopyOEMInf(infPath, null, 0, 0, null, 0, 0, null)) { 
    foreach (string device in devices) { 
     UpdateDriverForPlugAndPlayDevices(IntPtr.Zero, device, infPath, 0, false); 
    } 
    } 
} 
+0

你在哪裏把這段代碼放在你的安裝包裏?它是一個MSI? – pdiddy 2013-03-14 18:48:40

+1

嘿,我很抱歉已經有一段時間了,因爲我看了這段代碼或者使用過它......但是我確定這是一個Windows安裝項目,我創建了一個MSI。我相信這段代碼位於其中一個Installer類中,並且通過在自定義操作中調用此安裝程序來調用代碼。 – Misha 2013-03-15 19:47:22

相關問題