2011-04-29 19 views
2

ソフトウェアがクライアントコンピュータにインストールされた後、USBドライバをインストールしたい(または少なくともインストールの準備をします)必要があります。ソフトウェアをインストールした後にUSBドライバをインストールする方法

私はVisual Studio 2008でC#で書かれた小さなプログラムを持っており、VS2008の標準機能を使用してプログラムをインストールできます。このプログラムは、USBケーブルを介してハードウェアデバイスと通信します。 USBドライバはftdiから提供され、ユーザがUSBソケットにプラグを差し込むとインストールできます。これはうまく動作しますが、ソフトウェアのインストール時にファイルをコピーします。これが完了したら、画面にメッセージを表示します。 「USBケーブルをソケットに差し込んでからOKをクリックしてください」というメッセージが表示され、その時点からドライバのインストールが自動的に実行されます。 (新しいプリンタのソフトウェアをインストールしたときと同じです)。

どうすればいいか教えてください。いくつかの例から始めることができれば嬉しいです。

ヘンリー。

答えて

0

これに関連するAPIは、ドライバインストールフレームワーク(DIFx)を含む「SetupAPI」です。特に、DiInstallDriver機能が必要です。

しかし、「続行するにはOK」メッセージを表示する必要があるかどうかはわかりません。 。ドライバーがすでにインストールされている場合、Windowsは自動的に、すぐに電源が入っていますなどのUSBデバイスをインストールします

1

をこれは動作します:

// szInfDirectory is a directory on the hard drive where your installer copied the driver files to. 

TCHAR szInfPath[MAX_PATH]; 
_tcscpy(szInfPath, szInfDirectory); 
_tcscat(szInfPath, _T("YourDriver.inf")); 

TCHAR szDestinationInfFileName[MAX_PATH]; 

if((!SetupCopyOEMInf(szInfPath, szInfDirectory, SPOST_PATH, 0, szDestinationInfFileName, MAX_PATH, NULL, NULL))) 
{ 
    nResult = ERR_COPYINF_FAILED; 
    return; 
} 

LPCTSTR HardwareIds[] = 
{ 
    _T("USB\\Vid_123f&Pid_0444"), 
    _T("USB\\Vid_123f&Pid_0555"), 
}; 
const size_t cbMax = sizeof(HardwareIds)/sizeof(*HardwareIds);  

bool fInnerLoopFailed = false; 
for(size_t cb=0; (cb<cbMax) && (!fInnerLoopFailed); cb++) 
{ 
    BOOL bRebootReqTemp = FALSE; 
    if((!UpdateDriverForPlugAndPlayDevices(NULL, HardwareIds[cb], szInfPath, INSTALLFLAG_FORCE, &bRebootReqTemp))) 
    { 
    if(ERROR_NO_SUCH_DEVINST == GetLastError()) 
    { 
     // nothing to do: device not present 
    } 
    else 
    { 
     nResult = ERR_UPDATE_DRIVER_FAILED; 
     fInnerLoopFailed = true; 
     break; 
    } 
    } 
} 

if(fInnerLoopFailed) 
{ 
    // error 
    return; 
} 

// success 
+0

は、このソリューションは唯一の32ビットシステム用で、newdevを要することに留意すべきです.lib/newdev.h – mojuba

関連する問題