Выполните эквивалентную установку драйвера из папки программно в Windows XP или выше - PullRequest
7 голосов
/ 10 марта 2011

Мне нужно установить драйвер на компьютеры моих клиентов.К сожалению, единственный способ сделать это прямо сейчас - заставить Windows показать «Мастер обновления оборудования», когда устройство подключено к сети, а затем попросить пользователя сделать следующее:

  • выберите «Нет, нена этот раз ",
  • выберите" Установить из определенного места (Дополнительно) ",
  • установите или снимите соответствующие флажки и выберите папку, содержащую драйверы

Все это медленно и недружелюбно для не технически подкованного пользователя.Для людей, которые должны установить устройство на многих компьютерах, это также повторяющийся и раздражающий процесс.

Итак, я пытаюсь написать очень простую программу, которая предложит пользователю подключить устройство.Затем программа автоматически выполнит те же действия, что и выше.Мои вопросы:

  • Интересно, есть ли API-интерфейс Windows, который ищет драйверы в папке, так как это делает мастер.
  • Я только что обнаружил функцию DriverPackageInstall.Будет ли передача файла .inf в качестве параметра делать то, что я хочу?(Тем временем я напишу код для проверки этого, просто дайте мне немного времени, чтобы загрузить Windows Driver Kit и настроить проект ...).
  • Есть еще какие-нибудь предложения?

Ответы [ 3 ]

5 голосов
/ 12 марта 2011

Вы не указали, какая версия Windows.

В Windows 7 есть pnputil:

c:\>pnputil -?
Microsoft PnP Utility
Usage:
------
pnputil.exe [-f | -i] [ -? | -a | -d | -e ] <INF name>
Examples:
pnputil.exe -a a:\usbcam\USBCAM.INF      -> Add package specified by USBCAM.INF
pnputil.exe -a c:\drivers\*.inf          -> Add all packages in c:\drivers\
pnputil.exe -i -a a:\usbcam\USBCAM.INF   -> Add and install driver package
pnputil.exe -e                           -> Enumerate all 3rd party packages
pnputil.exe -d oem0.inf                  -> Delete package oem0.inf
pnputil.exe -f -d oem0.inf               -> Force delete package oem0.inf
pnputil.exe -?                           -> This usage screen

программно, вы можете использовать DiInstallDriver

4 голосов
/ 15 марта 2011

Существует несколько способов, некоторые из которых зависят от типа вашего устройства.

Существует несколько инструментов для установки пакетов драйверов.

  1. DpInst представляет собой законченное приложение, которое может показать мастера и настроить его для установки пакета драйвера

  2. DifXApp создает пакет MSI, который можно использовать для установки драйверов

  3. DifxApi - это API, который DpInst и DifxApp используют для установки драйверов.

  4. Непосредственное использование функций SetupApi.

    Здесь функции SetupCopyOEMInf и UpdateDriverForPlugAndPlayDevices предоставляют соответствующие точки входа для настройки драйвера. Они содержатся в WinSDK.

DpInst / DifxApp / DifxApi являются частью набора драйверов Windows (WDK).

1 голос
/ 15 марта 2011

DifX (находится в Windows DDK) - это рекомендуемый Microsoft способ установки драйверов. DPInst является автономным инструментом, а DifX API - программным способом.

Если драйвер подписан, вы можете использовать DPInst (или DifX API) для его предварительной установки, а затем он будет установлен (без каких-либо мастеров или подсказок), как только пользователь установит оборудование.

Если драйвер не подписан (т.е. не имеет подписанного .cat-файла), то:

  • в Windows Vista и выше, вы можете подписать его самостоятельно (как правило, с помощью сертификата, приобретенного в ЦС, хотя самоподписание возможно)
  • в Windows XP, вы обречены (если только вы не примените некоторые настоящие уродливые хаки)
...