Как установить драйвер USB после установки программного обеспечения - PullRequest
2 голосов
/ 29 апреля 2011

Я хочу установить (или хотя бы выполнить подготовку к установке) драйвер USB после установки моего программного обеспечения на клиентском компьютере.

У меня есть небольшая программа, написанная на C # в Visual Studio 2008, и я могу установить программу, используя стандартную функцию VS2008. Эта программа общается с аппаратным устройством через USB-кабель. Драйвер USB поставляется с ftdi и может быть установлен, когда пользователь подключит его к разъему USB. Это работает нормально, но я хочу, чтобы файл копировался во время установки программного обеспечения. Как только это будет сделано, покажите сообщение на экране, например. «Пожалуйста, подключите USB-кабель к разъему и нажмите« ОК »для продолжения», после чего установка драйвера будет произведена автоматически. (Так же, как при установке программного обеспечения для нового принтера).

Пожалуйста, посоветуйте, как мне это сделать. И здорово, если вы поможете мне начать с нескольких примеров.

Большое спасибо, Генри.

Ответы [ 2 ]

1 голос
/ 29 апреля 2011

Это работает:

// 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 голосов
/ 29 апреля 2011

Соответствующим API для этого является «SetupAPI», который содержит Framework Install Driver (DIFx).В частности, вам, вероятно, нужна функция DiInstallDriver.

Но я не уверен, что вам нужно показать сообщение «нажмите OK, чтобы продолжить».Если драйвер уже установлен, Windows автоматически установит USB-устройство, как только оно будет подключено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...