2011-04-29 8 views
2

클라이언트 컴퓨터에 소프트웨어를 설치 한 후 USB 드라이버를 설치 (또는 적어도 설치 준비)하고 싶습니다.소프트웨어 설치 후 USB 드라이버 설치 방법

Visual Studio 2008의 C#으로 작성된 작은 프로그램이 있으며 VS2008의 표준 기능을 사용하여 프로그램을 설치할 수 있습니다. 이 프로그램은 USB 케이블을 통해 하드웨어 장치와 통신합니다. USB 드라이버는 ftdi에서 제공되며 사용자가 USB 소켓에 연결할 때 설치할 수 있습니다. 이 잘 작동하지만 소프트웨어를 설치하는 동안 파일을 복사 할 수 있습니다. 이 작업이 완료되면 화면에 메시지를 표시하십시오. "소켓에 USB 케이블을 연결하고 계속하려면 확인을 클릭하십시오"라는 메시지가 표시되면 드라이버 설치가 자동으로 수행됩니다. (새 프린터 용 소프트웨어를 설치할 때와 동일).

내가 어떻게 할 수 있는지 조언 해주십시오. 그리고 몇 가지 예를 시작하는 데 도움을 줄 수 있다면 좋을 것입니다.

헨리에게 감사드립니다.

답변

0

관련 API는 DIFx (Driver Install Framework)가 포함 된 "SetupAPI"입니다. 특히 DiInstallDriver 기능이 필요할 수 있습니다.

"계속하려면 확인을 클릭하십시오"라는 메시지를 표시해야하는지 확실하지 않습니다. 드라이버가 이미 설치되어있는 경우가 연결됩니다으로, 윈도우는 즉시 자동으로 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

관련 문제