Как установить драйвер с помощью InnoSetup?

Я хочу установить драйвер для последовательного порта с помощью InnoSetup. У меня есть файл inf, и я могу установить драйвер вручную через диспетчер устройств, но я хотел бы иметь возможность включить драйвер в мой установщик, чтобы пользователям не приходилось сталкиваться с проблемой установки самого драйвера.

Ответ 1

См. InstallHinfSection в MSDN. В документации также упоминается, как вызвать установку, вызвав "Rundll32.exe". Вероятно, вы получите что-то вроде этого:

[Files]
..
Source: "driver\my_x86driver.inf"; DestDir: {app}\driver;
Source: "driver\my_x86driver.sys"; DestDir: {app}\driver;

[Run]
..
Filename: {sys}\rundll32.exe; Parameters: "setupapi,InstallHinfSection DefaultInstall 128 {app}\driver\my_x86driver.inf"; WorkingDir: {app}\driver; Flags: 32bit;


Обратите внимание, что вам может потребоваться запустить настройку в 64-битном режиме в 64-битных системах, чтобы иметь возможность установить драйвер:

[Setup]
..
ArchitecturesInstallIn64BitMode=x64 

Также вы можете поместить проверки для запуска версии .inf файла в зависимости от архитектуры машины (например, Check: Is64BitInstallMode).

Ответ 2

Это лучший ответ: Настройка Inno: установить драйверы с помощью rundll32 или dpinst?

Использование InstallHinfSection в Windows 7 и далее кажется либо сломанным, либо чреватым трудностями. Сделать его работу из пакетного файла сложно, что затрудняет работу с innosetup. DPINST кажется предпочтительным и проще.

Ответ 3

Я использовал dpinst следующим образом:

 [Files]    
Source: "Source\dpinst\dpinst32.exe"; DestDir: "{app}\driver"; DestName: dpinst.exe; Check: not IsWin64; Flags: ignoreversion
Source: "Source\dpinst\dpinst64.exe"; DestDir: "{app}\driver"; DestName: dpinst.exe; Check: IsWin64; Flags: ignoreversion

[Run]
Filename: "{app}\driver\dpinst.exe"; Parameters: "/A /LM";