Установка драйверов Inno Setup - PullRequest
       19

Установка драйверов Inno Setup

3 голосов
/ 13 февраля 2012

Не удается найти способ установки драйверов для Inno Setup.

Я проверил эти вопросы здесь: Inno setup: установить драйверы с помощью rundll32 или dpinst? Как запустить файл перед установкой с помощью Inno Setup и Как установить распространяемый DirectX из Inno-setup? .

Мой код такой:

[Files]
Source: "drivers\dpinst64.exe"; DestDir: "{app}\drivers"; Check: Is64BitInstallMode; Components: drivers;

[code] 
function PrepareToInstall(var NeedsRestart: Boolean): String;
var
ResultCode: Integer;
begin

  if IsWin64 then begin
      ExtractTemporaryFile('drivers\dpinst64.exe');
      Exec(ExpandConstant('{tmp}\dpinst64.exe'), '-install "' + ExpandConstant('{tmp}') + '"', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
  end;    

end;

1) Прямо сейчас мой установщик падает, потому что он не может найти драйверы \ dpinst64.exe при извлечении временного файла.

2) До этого я пытался просто запустить .exe в [run], но ничего не произошло. Когда был запущен .exe, он длился 5 миллисекунд, а затем я получил код возврата -2147483648. Exec (ExpandConstant ('{win} \ notepad.exe'), '', '', SW_SHOW, ewWaitUntilTeridity, ResultCode) прекрасно работает в InitializeSetup.

В чем здесь может быть проблема? Есть ли другой лучший способ начать установку драйвера непосредственно перед тем, как установщик завершит свою работу?

Ответы [ 3 ]

1 голос
/ 13 февраля 2012

Если вы попробуете это, что произойдет?

Какой параметр для установки dpinst64.exe? С вашей попытки это выглядит так (при условии, что {tmp} в конечном итоге является Windows% TEMP%):

%TEMP%\dpinst64.exe -install "%TEMP%"

Это правильное утверждение для установки dpinst64.exe?

[Files]
Source: "drivers\dpinst64.exe"; DestDir: "{tmp}"; Check: Is64BitInstallMode; Components: drivers;

[Code] 
function PrepareToInstall(var NeedsRestart: Boolean): String;
var
ResultCode: Integer;
begin

  if IsWin64 then begin
      ExtractTemporaryFile('dpinst64.exe');
      Exec(ExpandConstant('{tmp}\dpinst64.exe'), '-install "' + ExpandConstant('{tmp}') + '"', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
  end;    

end;

Я предполагаю, что драйвер dpinst64.exe - это единственный файл в папке драйверов вашего источника, который должен распространяться в вашем установщике. Если это не так, вы должны ввести следующее:

[Files]
Source: "drivers\*"; DestDir: "{tmp}"; Check: Is64BitInstallMode; Components: drivers;
0 голосов
/ 01 мая 2015

имейте в виду, что dpinst - это программное обеспечение, которое означает, что оно фактически не устанавливает устройство, пока оно не подключено.

0 голосов
/ 13 февраля 2012

Чтобы ответить на ваши вопросы: 1. Вы должны использовать ExtractTemporaryFile('dpinst64.exe'); вместо ExtractTemporaryFile('drivers\dpinst64.exe');.2. В случае сбоя при запуске DPINST64.EXE может потребоваться извлечь INF, SYS и любые другие зависимости для драйвера в каталог, где находится DPINST64.EXE.Для извлечения нескольких файлов вам понадобится несколько операторов ExtractTeoraryFile.

...