2012-03-08 10 views
7

Utilizzo di innosetup e visualizzazione di errore/msgbox se uno dei processi [RUN] non restituisce il codice di processo 0. Lo sto utilizzando per l'autorizzazione processo, se l'autorizzazione non ha esito positivo, voglio avvisare l'utente.Utilizzo di Process Codice di uscita per visualizzare un messaggio di errore per un file specifico in [Esegui]

Ho seguente:

Filename: "{pf32}\Common Files\Authorization.exe"; Parameters: " "{code:GetAuthorizationFilePath}" /s"; WorkingDir: "{tmp}"; Flags: skipifdoesntexist hidewizard; StatusMsg: "Authorizing License"; 

mi restituisce:

Process exit code:0 

0, naturalmente, è successo, ma se non è 0 voglio informare l'utente.

C'è un modo per farlo?

Grazie e saluti, Kev84

+0

Vedi anche [Come forzare l'installazione Inno Setup a fallire quando comando Esegui fallisce?] (Http://stackoverflow.com/q/1122588/850848) e [Inno Setup: come Abort/Terminare l'installazione durante l'installazione?] (Http://stackoverflow.com/q/6345920/850848) –

risposta

7

Penso che ci sia alcun modo per ottenere questo dalla sezione [Run]. Che cosa si può fare è:

  • utilizzare lo script Pascal per questo compito
  • o visualizzare il messaggio di errore modale dalla vostra applicazione eseguita Authorization.exe e terminare solo dopo che l'utente conferma il messaggio di errore (l'installazione proseguirà pe con l'esecuzione degli altri file nella sezione [Run])

Ecco il codice di esempio del Pascal Script; è possibile controllare anche la commented version di questo codice:

[Code] 

function NextButtonClick(CurPageID: Integer): Boolean; 
var 
    ResultCode: Integer; 
begin 
    Result := True; 

    if CurPageID = wpWelcome then 
    begin 
    Result := False; 
    if Exec(ExpandConstant('{pf32}\Common Files\Authorization.exe'), '', '', 
     SW_SHOW, ewWaitUntilTerminated, ResultCode) then 
    begin 
     if ResultCode = 0 then  
     Result := True 
     else 
     MsgBox('The authorization failed!', mbCriticalError, MB_OK); 
    end; 
    end; 
end; 
+0

Quindi devo creare la mia funzione in quella voce [Esegui]? In tal caso, dove chiamo tale funzione? C'è un modo per eseguire il metodo al termine del processo e, in caso affermativo, come ottengo il codice di processo/errore? – Kev84

+0

Scusate per il ritardo; Sono abbastanza sicuro di averlo risolto da solo, ma comunque ... Ho aggiunto l'esempio del codice PascalScript insieme a ['versione commentata'] (http://stackoverflow.com/revisions/9621406/ 2). – TLama

+1

Se sostituisce una voce '[Esegui]', impostare questo codice su 'WpWelcome' non sembra una buona idea. Personalmente userò la funzione 'CurStepChanged', su' CurStep = ssPostInstall'. – Nyerguds

3

ho avuto gli stessi requisiti: per eseguire un programma esterno e visualizzare un messaggio di errore se il codice di ritorno non è 0. E 'stato molto importante per me correre la programma nella sezione Run in quanto avevo bisogno di visualizzare un messaggio di stato e la barra di avanzamento è piacevole da avere.

ho trovato che è possibile utilizzare AfterInstall nella sezione Run per far scattare l'esecuzione del programma e controllare il codice risultato (vedi this link per maggiori informazioni su AfterInstall.)

Quindi, la mia idea era quella di eseguire un manichino programma come change e utilizzare la procedura specificata in AfterInstall per eseguire il programma reale e catturare il suo codice risultato.

[Code] 
procedure ExecuteRealProgram(); 
var 
    ResultCode: Integer; 
begin 
    if Exec(ExpandConstant('{pf32}\Common Files\Authorization.exe'), '', '', SW_SHOW, 
      ewWaitUntilTerminated, ResultCode) 
    then begin 
     if not (ResultCode = 0) then 
      MsgBox('Error! ResultCode is ' + IntToStr(ResultCode), mbCriticalError, MB_OK); 
    end 
    else 
     MsgBox('Exec failed! Error: ' + SysErrorMessage(ResultCode), mbCriticalError, MB_OK); 
    end; 
end; 
[Run] 
Filename: "change.exe"; WorkingDir: "{tmp}"; \ 
    StatusMsg: "Running external program. Please wait."; AfterInstall: ExecuteRealProgram 
Problemi correlati