2012-02-16 18 views
6

Ho questo codice seguente con Inno Setup.Come gestire il file .msi con Inno Setup?

Ma come posso applicare questa funzione simile al file .msi?

msiexec /I "\package\file.msi" /qb? Come?

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; 

risposta

15

Prova questo:

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

Oppure:

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

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

C'è un modo per disinstallare automaticamente il msi come parte della routine di disinstallazione InnoSetup però? – Nyerguds

3

Nota che: sto usando Inno Setup 5.5.3 su Windows 7, e che questo codice è per lo script Inno Setup nella sezione Esegui. Con questo codice è possibile eseguire i file msi senza problemi. Ecco il codice:

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

Basandosi sulla risposta che @kobik ha dato. Dovevo includere ".exe" nel nome del file. Come così:

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/digitalextremist) **: l'inserimento di blocchi di codice nei commenti rimuove le interruzioni di riga e rende molto difficile la lettura. Tuttavia, una risposta lo rende molto chiaro. –

+1

@digitalextremist: concordato con Alan, questo codice non sarebbe sicuramente piacevole come parte di un commento. –

+1

@ mike, ovviamente kobik "non ha mostrato l'intero codice". Questo è al massimo un commento ... Inoltre, non sarebbe meglio lasciare che la shell di Windows apra il file da sola? Voglio dire, basta passare il nome file del pacchetto MSI al parametro 'Nomefile'. Shell gestirà questo se Windows Installer è installato e i pacchetti MSI sono registrati per essere eseguiti da esso. – TLama

Problemi correlati