2012-02-16 14 views
6

Mam następujący kod z Inno Setup.Jak obsłużyć plik .msi w programie Inno Setup?

Ale jak mogę zastosować tę podobną funkcję do pliku .msi?

msiexec /I "\package\file.msi" /qb? W jaki sposób?

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; 

Odpowiedz

15

Spróbuj tego:

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

Lub:

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

[Run] 
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\file.msi"" /qb"; WorkingDir: {tmp}; 
+0

Czy istnieje jakiś sposób, aby automatycznie odinstalować msi jako część odinstalowywania rutyny InnoSetup chociaż? – Nyerguds

3

Uwaga że: Używam Inno Setup 5.5.3 na Windows 7, i że to jest kod dla skryptu instalacyjnego Inno w sekcji uruchamiania. Za pomocą tego kodu można bez problemu uruchamiać pliki msi. Oto kod:

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

W oparciu o odpowiedź udzieloną przez @kobik. Musiałem dołączyć ".exe" w nazwie pliku. tak:

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); 
+0

** [digitalextremist] (http://stackoverflow.com/users/1169705/digitalextermist) **: Publikowanie bloków kodu w komentarzach usuwa podziały wierszy i sprawia, że ​​bardzo trudno je odczytać. Jednak odpowiedź jest bardzo jasna. –

+1

@digitalextremist: Zgodny z Alanem ten kod zdecydowanie nie byłby przyjemny jako część komentarza. –

+1

@mike, oczywiście kobik "nie pokazał całego kodu". To jest co najwyżej komentarz ... Poza tym, czy nie byłoby lepiej, gdyby Powłoka Windowsa otworzyła plik sam? Mam na myśli, po prostu przekazanie nazwy pliku pakietu MSI do parametru "Filename". Shell poradzi sobie z tym, jeśli Instalator Windows jest zainstalowany, a pakiety MSI są zarejestrowane, aby mogły zostać przez niego wykonane. – TLama

Powiązane problemy