Как обработать MSI-файл с помощью Inno Setup? - PullRequest
7 голосов
/ 16 февраля 2012

У меня есть следующий код с Inno Setup.

Но как я могу применить эту похожую функцию к MSI-файлу?

msiexec /I "\package\file.msi" /qb?Как?

procedure AfterMyProgInstall(S: String);
var
  ErrorCode: Integer;
begin
  {MsgBox('Please wait the libraries are getting installed, ' +
          'without the libraries it wont work.', mbInformation, MB_OK);}
  ExtractTemporaryFile(S);
  {SW_SHOW, SW_SHOWNORMAL, SW_SHOWMAXIMIZED, SW_SHOWMINIMIZED, SW_SHOWMINNOACTIVE, SW_HIDE}
  ShellExec('', ExpandConstant('{app}\package\' + S), '', '', SW_SHOWNORMAL,
            ewWaitUntilTerminated, ErrorCode);
end;

Ответы [ 3 ]

19 голосов
/ 16 февраля 2012

Попробуйте это:

ShellExec('', 'msiexec.exe',
  ExpandConstant('/I "{tmp}\package\file.msi" /qb'),
  '', SW_SHOWNORMAL, ewWaitUntilTerminated, ErrorCode);

Или:

[Files]
Source: file.msi; DestDir: {tmp}; Flags: deleteafterinstall;

[Run]
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\file.msi"" /qb"; WorkingDir: {tmp};
5 голосов
/ 28 января 2014

Опираясь на ответ @kobik дал. Мне пришлось включить «.exe» в имя файла. Вот так:

if not ShellExec('', 'msiexec.exe', ExpandConstant('{tmp}\package\file.msi'),
  '', SW_SHOWNORMAL, ewWaitUntilTerminated, ErrorCode)
then
  MsgBox('Msi installer failed to run!' + #13#10 + ' ' +
    SysErrorMessage(ErrorCode), mbError, MB_OK);
4 голосов
/ 22 сентября 2013

Обратите внимание , что: я использую Inno Setup 5.5.3 в Windows 7 и этот код предназначен для сценария Inno Setup в разделе выполнения.С этим кодом вы можете без проблем запускать msi файлы.Вот код:

[Run]
Filename: `{src}\PhysX.msi;` Description: Nvidia PhysX; Verb: open; Flags: shellexec postinstall waituntilterminated runascurrentuser skipifsilent
...