2016-09-28 1 views
1

Wie kann ich auf den Rückkehrcode des Inno Setup-basierten Installationsprogramms zugreifen?Inno Setup Testen des Installationsprogramm-Beendigungscodes

Zum Beispiel, this Dokumentation sagt, dass Exit-Code wird 1, wenn "Setup konnte nicht initialisiert werden". In meinem Installer gibt Code in einigen Fällen False von InitializeSetup() zurück. Ich führe das Installationsprogramm mit /silent Flag an der Eingabeaufforderung. Wenn ich echo %errorlevel%, I 0

Relevante Teil des Codes aus der InitializeSetup() Funktion erhalten:

function InitializeSetup(): Boolean; 
var 
    ResultCode: Integer; 
begin 
    { In silent mode, set Result to false so as to exit before wizard is } 
    { launched in case setup cannot continue. } 
    if WizardSilent() then 
    begin 
    { CompareVersion() logically returns the -1, 0 or 1 based on } 
    { whether the version being installed is less than, equal to or greater } 
    { than version already installed. Returns 0 is there is no existing } 
    { installation. } 
    ResultCode := CompareVersion(); 
    if ResultCode < 0 then 
    begin 
     Result := False; 
     Exit; 
    end; 
    end; 

    Result := True; 
end; 

von der Kommandozeile, hier ist, wie ich laufe und Rückgabewert erfassen:

C:\VersionCheck>myinstaller.exe /Silent 

C:\VersionCheck>echo %errorlevel% 
0 

C:\VersionCheck> 

Die Protokolldatei zeigt:

2016-09-29 08:05:11.259 Log opened. (Time zone: UTC-07:00) 
2016-09-29 08:05:11.259 Setup version: Inno Setup version 5.5.9 (u) 
2016-09-29 08:05:11.259 Original Setup EXE: C:\VersionCheck\myinstaller.exe 
2016-09-29 08:05:11.259 Setup command line: /SL5="$9051C,3445541,131584,C:\VersionCheck\myinstaller.exe" /Silent 
2016-09-29 08:05:11.259 Windows version: 6.3.9600 (NT platform: Yes) 
2016-09-29 08:05:11.259 64-bit Windows: Yes 
2016-09-29 08:05:11.259 Processor architecture: x64 
2016-09-29 08:05:11.259 User privileges: Administrative 
2016-09-29 08:05:11.259 64-bit install mode: Yes 
2016-09-29 08:05:11.259 Created temporary directory: C:\Users\ADMINI~1\AppData\Local\Temp\2\is-TQB2V.tmp 
2016-09-29 08:05:11.275 Installed version component : 3 
2016-09-29 08:05:11.275 Updating to version component : 0 
2016-09-29 08:05:11.275 This computer already has a more recent version (3.5.0.0) of XYZ. If you wantto downgrade to version 0.0.0.0 then uninstall and try again. Setup will exit. 
2016-09-29 08:05:11.275 InitializeSetup returned False; aborting. 
2016-09-29 08:05:11.275 Got EAbort exception. 
2016-09-29 08:05:11.275 Deinitializing Setup. 
2016-09-29 08:05:11.275 Log closed. 

Gibt es Som Was fehlt mir?

+0

Ja, erhalten Sie den Exit-Code 1, wenn Sie zurückkommen 'false' von' InitializeSetup'. Wenn Sie dies nicht tun, zeigen Sie uns eine genaue Befehlssequenz an, die Sie zum Ausführen des Installationsprogramms verwenden, und überprüfen Sie den Beendigungscode, einschließlich einer vollständigen Ausgabe. –

+0

@MartinPrikryl - Bearbeitete die Frage, um weitere Details zu erfassen. Bitte prüfe. – Anand

Antwort

1

Ihr Test ist nicht gültig.

Wenn Sie eine GUI-Anwendung (das Installationsprogramm) über eine Befehlszeile ausführen, wartet die Konsole nicht auf das Beenden des Programms. So kann der %errorlevel% keinen Exit-Code der Anwendung (Installer) enthalten, da dieser zu diesem Zeitpunkt noch nicht fertig ist.

In diesem Fall spiegelt die %errorlevel% Fehler (aber nicht Erfolg) des Startens der Anwendung.

Beachten Sie auch, dass der Silent-Modus tatsächlich keine Auswirkungen hat. Der nicht-stille Modus verhält sich genauso.


Aber wenn Sie genau die gleichen Befehle an eine Batch-Datei (.bat) hinzufügen, wird es funktionieren. Da die Batch-Datei darauf wartet, dass die Anwendung beendet wird.

C:\VersionCheck>test.bat 

C:\VersionCheck>myinstaller.exe /Silent 

C:\VersionCheck>echo 1 
1 
C:\VersionCheck> 

Wo die test.bat Ihre zwei Befehle enthält:

myinstaller.exe /Silent 
echo %errorlevel% 
+0

Danke für die schnelle Antwort. Es klappt :) – Anand

Verwandte Themen