2016-11-06 3 views
0

Ich habe eine extractor.bat, die ich gerne nach dem Installer installieren würde alles installiert.Inno-Setup-Exec-Funktion nicht voll funktionsfähig

Extractor.bat enthält:

echo ARGUMENT 1 (PATH TO CUSTOM MODS): %1 
echo ARGUMENT 2 (PATH TO EXTRACT TO): %2 

set custommods=%1 
set wotpath=%2 

IF EXIST %custommods%\*.zip (
    for /F "delims=" %%I IN (' dir /b /s /a-d %custommods%\*.zip ') DO (
     "7za.exe" x "%%I" -o%wotpath% -y 
    ) 
) 
IF EXIST %custommods%\*.7z (
    for /F "delims=" %%I IN (' dir /b /s /a-d %custommods%\*.7z ') DO (
     "7za.exe" x "%%I" -o%wotpath% -y 
    ) 
) 

Dieser Teil der ssPostInstall Code ist:

begin 
if (CurStep=ssDone) then 
begin 
    Exec(ExpandConstant('{app}\extractor.bat'), ExpandConstant('{app}\custom_folder {app}\ > extractor.log'), '', SW_HIDE,  ewWaitUntilTerminated, ErrCode); 
    Exec(ExpandConstant('{app}\res_mods\quick_fix.bat'), '', '', SW_HIDE,  ewWaitUntilTerminated, ErrCode); 

    logfilepathname := expandconstant('{log}'); 
    logfilename := ExtractFileName(logfilepathname); 
    newfilepathname := expandconstant('{app}\') + 'Installer.log'; 
    filecopy(logfilepathname, newfilepathname, false); 
end; 

Ende;

Das Problem ist, dass diese Funktion auf meinem PC funktioniert, aber nicht auf einem anderen PC funktioniert, auch ohne Antivirenschutz. Warum passiert das?

habe ich vor kurzem umgezogen, dass Extraktor Ausführung an dem [CODE] -Abschnitt, war zuvor in [RUN] -Abschnitt als eine Zeile:

Filename: "{tmp}\extractor.bat"; Parameters: " ""{app}\custom_folder"" ""{app}\"" "; flags: runhidden; 

Und es funktioniert an diesem PC in Ordnung, aber wenn ich Verwenden Sie den Codeabschnitt, der nicht funktioniert. Ich habe versucht, es zu debuggen, und bemerkte, dass die Ausgabe von extractor.bar zu Installer.log in der Mitte ausgeschnitten der zweiten Zeile wird, siehe:

ARGUMENT 1 (PATH TO CUSTOM MODS): D:\Games\GameFolder 
ARGUMENT 2 (PATH TO EXTRACT TO): of 

Einige seltsame „von“ und nichts weiter.

Edit:

versucht, diese (zu Spielzeug mit cmd Makro):

Exec(ExpandConstant('{cmd}'), '/C ' + ExpandConstant('{app}') + '\res_mods\quick_fix.bat', ExpandConstant('{app}'), SW_HIDE, ewWaitUntilTerminated, ErrCode); 

und es wurde nicht ausgeführt, natürlich habe ich eine quick_fix.bat in diesem Ordner vorhanden.

edit2:

ich dies derzeit mit bin:

 Exec(ExpandConstant('{app}\extractor.bat'), ExpandConstant('"{app}\Custom_mods" "{app}" > _Extractor.log'), '', SW_HIDE,  ewWaitUntilTerminated, ErrCode); 

Und es funktioniert, aber nicht jedermanns Sache, funktioniert für mich gedacht. Es kann in Ordnern installiert werden, die Namen mit Leerzeichen enthalten.

EDIT3:

[Files] 
    Source: "{#CompPath}\7za.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall 
    Source: "{#CompPath}\7za.dll"; DestDir: "{tmp}"; Flags: deleteafterinstall 
    Source: "{#CompPath}\7zxa.dll"; DestDir: "{tmp}"; Flags: deleteafterinstall 

Edit:

ich versucht habe zu machen quick_fix.bat zu arbeiten, da es einfacher Makro ist, und es ist nicht so gut ausgeführt wird.

[Files] 
    Source: "{#CompPath}\quick_fix.bat"; DestDir: "{app}\res_mods\"; Flags: deleteafterinstall 

[CODE] 
Exec(ExpandConstant('{cmd}'), '/C ' + ExpandConstant('{app}') + '\res_mods\quick_fix.bat', ExpandConstant('{app}'), SW_HIDE, ewWaitUntilTerminated, ErrCode); 
+1

Beginnen Sie hier: [Debug nicht funktionierende Batch-Datei von Inno Setup-Installer ausgeführt] (http: // Stackoverflow.com/questions/37324386/debugging-nicht-arbeiten-Batch-Datei-ausgeführt-von-Inno-Setup-Installer) –

+1

* "bemerkte, dass die Ausgabe von extractor.bar zu Installer.log in der Mitte der zweiten Zeile ausgeschnitten wird" * - Meinst du nicht 'extractor.log' und nicht' Installer.log'? –

+0

Installer.log ist ein separates Protokoll, Sie können es dort in meinem Code sehen, aber es ist nicht von irgendwelchen Problemen betroffen. Ich habe es nur zur besseren Übersicht dieses Teils aufgenommen. –

Antwort

1

Ein echtes Problem, das ich sehen kann, ist, dass Sie einen Pfad zum Installationsordner nicht mit doppelten Anführungszeichen umbrechen. Also, wenn es Leerzeichen enthält (was es normalerweise tut, wie man normalerweise zu Program Files installiert), bricht Ihre Batch-Datei.

So vielleicht auf dem Computer, wo das Installationsprogramm funktioniert, installieren Sie in einem Ordner ohne Leerzeichen. Während auf dem Computer, wo das Installationsprogramm nicht funktioniert, installieren Sie in einem Ordner mit Leerzeichen.

+0

Nachdem ich in Ihrem Beispiel fehlende Quoten wie hinzugefügt, sieht das Extraktor Protokoll wie folgt nun: ARGUMENTATION 1 (WEG ZUM CUSTOM MODS): "D: \ Games \ Some_Game \ custom_folder" ARGUMENTATION 2 (WEG ZUM zu extrahieren) : "D: \ Games \ Some_Game \" Ich versuche diesen anderen Ansatz wie Sie gezeigt haben, mit {cmd} usw., aber ich kann es aus irgendeinem Grund nicht funktionieren. –

+0

Fügen Sie Ihrer Frage einen neuen Code hinzu. Fügen Sie der Batchdatei mehr Debugging hinzu. Hast du versucht einen absoluten Pfad zur 7z zu benutzen? –

+0

Ich habe Ihren zweiten Code ausprobiert, und er wurde nicht ausgeführt. Deshalb habe ich nur versucht, dem vorherigen Code fehlende Kontingente hinzuzufügen. Jetzt sieht es so aus: Exec (ExpandConstant ('{app} \ extractor.bat'), ExpandConstant ('{app} \ custom_folder "" {app} \ "> _Extractor.log'), ' ', SW_HIDE, ewWaitUntilTerminated, ErrCode); Und nein, ich habe nicht versucht, diesen absoluten Weg, coud Sie geben Beispiel, wie es aussehen würde? –

Verwandte Themen