Verknüpfung zweier Variablen im Winst-Skript

Antworten
Benutzeravatar
friedhelm
Beiträge: 48
Registriert: 10 Dez 2009, 15:52

Verknüpfung zweier Variablen im Winst-Skript

Beitrag von friedhelm »

Tach Freunde,

in unserer Schule möchten wir via Opsi Gimp installieren. Wir haben viele W2k- und einige XP-Clients. Da die letzte unter W2k lauffähig Gimp-Version die 2.4.7 ist, habe ich ein Skript erstellt, welches anhand der NT-Versionen die richtige Gimp Version installiert. Die Basis für mein Skript war natürlich das Opsi-Template.

Das Skript scheint so weit zu funktionieren, bis auf das in der sekundären Sektion die beiden Variablen für den Installationspfad nicht zusammengebackpfeift werden. Da kommt diese Fehlermeldung:

Error: "p:\install\gimp\%GimpVer%" /SILENT .... ShellExecute Error 2 (Das System kann die angegebene Datei nicht finden)

Ich wäre über weiterführende Tipps und Hinweise sehr dankbar!

Anbei mein Winst-Skript:

Code: Alles auswählen

[Actions]
requiredWinstVersion >= "4.10.5"

DefVar $MsiId$
DefVar $UninstallProgram$
DefVar $LogDir$
DefVar $ProductId$
DefVar $MinimumSpace$
DefVar $InstallDir$
DefVar $ExitCode$
DefVar $OS$
DefVar $MinorOS$
DefVar $GimpVer$

Set $LogDir$ = "%SystemDrive%\tmp"
Set $OS$ = GetOS
Set $MinorOS$ = GetNTVersion

; ----------------------------------------------------------------
; - Please edit the following values                             -
; ----------------------------------------------------------------
Set $ProductId$       = "gimp"
Set $MinimumSpace$    = "200 MB"
; the path were we find the product after the installation
Set $InstallDir$      = "%ProgramFilesDir%\GIMP-2.0"
; ----------------------------------------------------------------

if not(HasMinimumSpace ("%SystemDrive%", $MinimumSpace$))
        LogError "Not enough space on %SystemDrive%, " + $MinimumSpace$ + " on drive %SystemDrive% needed for " + $ProductId$
        isFatalError
        ; Stop process and set installation status to failed
else
        comment "Show product picture"
        ShowBitmap "%ScriptPath%\" + $ProductId$ + ".png" $ProductId$
        
        if FileExists("%ScriptPath%\delsub.ins")
                comment "Start uninstall sub section"
                Sub "%ScriptPath%\delsub.ins"
        endif

        if ( $MinorOS$ = "Win2k" )
                        Message "Windows 2000 erkannt. Installiere Gimp 2.4.7...)
                        set $GimpVer$ = "gimp-2.4.7-i686-setup.exe"
                else
        
                        if ( $MinorOS$  = "WinXP")
                                Message "Windows XP erkannt. Installiere Gimp 2.6.11..."
                                set $GimpVer$ = "gimp-2.6.11-i686-setup.exe"
                        else
                                logError "Keine unterstützte Windows-Version.")
                                isFatalError
                        endif
                endif

        Message "Installiere "+$GimpVer$+" ..."
        comment "Starte Gimp Setup."
        Winbatch_install
        Sub_check_exitcode
        
        comment "Teste, ob die Installation erfolgreich verlief."
        ; Test if software marked as installed in registry
         if (GetRegistryStringValue("[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinGimp-2.0_is1] DisplayName") = "")
                logError "Fatal: After Installation [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinGimp-2.0_is1] not found"
                isFatalError
         else
                comment "Installation erfolgreich abgeschlossen."
         endif

endif

[Winbatch_install]
; === Inno Setup ================================================================
"%ScriptPath%"\"%GimpVer%" /SILENT

[Sub_check_exitcode]
comment "Test for installation success via exit code"
set $ExitCode$ = getLastExitCode
; informations to exit codes see
; http://msdn.microsoft.com/en-us/library/aa372835(VS.85).aspx
; http://msdn.microsoft.com/en-us/library/aa368542.aspx
if ($ExitCode$ = "0")
        comment "Looks good: setup program gives exitcode zero"
else
        comment "Setup program gives a exitcode unequal zero: " + $ExitCode$
        if ($ExitCode$ = "1605")
                comment "ERROR_UNKNOWN_PRODUCT  1605    This action is only valid for products that are currently installed."
                comment "Uninstall of a not installed product failed - no problem"
        else
                if ($ExitCode$ = "1641")
                        comment "looks good: setup program gives exitcode 1641"
                        comment "ERROR_SUCCESS_REBOOT_INITIATED 1641    The installer has initiated a restart. This message is indicative of a success."
                else
                        if ($ExitCode$ = "3010")
                                comment "looks good: setup program gives exitcode 3010"
                                comment "ERROR_SUCCESS_REBOOT_REQUIRED  3010    A restart is required to complete the install. This message is indicative of a success."
                        else
                                logError "Fatal: Setup program gives an unknown exitcode unequal zero: " + $ExitCode$
                                isFatalError
                        endif
                endif
        endif
endif
Vielen Dank!

Friedhelm
Benutzeravatar
d.oertel
uib-Team
Beiträge: 3327
Registriert: 04 Jun 2008, 14:27

Re: Verknüpfung zweier Variablen im Winst-Skript

Beitrag von d.oertel »

Hi,

siehe Getting started Handbuch
4.1.8 Elementare Befehle für primäre Sektionen
Kasten: Wichtig

gruss
d.oertel


Vielen Dank für die Nutzung von opsi. Im Forum ist unser Support begrenzt.

Für den professionellen Einsatz und individuelle Beratung empfehlen wir einen Support-Vertrag und eine Schulung.
Gerne informieren wir Sie zu unserem Angebot.

uib GmbH
Telefon: +49 6131 27561 0
E-Mail: sales@uib.de


Benutzeravatar
friedhelm
Beiträge: 48
Registriert: 10 Dez 2009, 15:52

Re: Verknüpfung zweier Variablen im Winst-Skript

Beitrag von friedhelm »

Tach,

vielen Dank für die aufschlußreiche Antwort. Die Handbuchseite 54 liegt aufgeschlagen seit mehreren Tagen auf meinem Schreibtisch.

So habe ich auch nach den "if"-Operatoren dies

Code: Alles auswählen

Message "Installiere "+$GimpVer$+" ..."
zu stehen, was auch den korrekten Wert liefert.

Und in der sekundären Sektion bringt dies

Code: Alles auswählen

"%ScriptPath%"\"%GimpVer%" /SILENT
leider nicht das gewünschte Resultat. Sondern

Code: Alles auswählen

Error: "p:\install\gimp\%GimpVer%" /SILENT
Also wird die erste Stringvariable korrekt durch den Inhalt ersetzt, die zweite aber nicht, obwohl diese korrekt gesetzt ist, was die Ausgabe der "Message" beweist. Maskiert der Backslash vielleicht die zweite Variable?

Friedhelm
Benutzeravatar
j.schneider
uib-Team
Beiträge: 2058
Registriert: 29 Mai 2008, 15:14

Re: Verknüpfung zweier Variablen im Winst-Skript

Beitrag von j.schneider »

Bitte Variablen ($) und Kostanten (%) nicht verwechseln...
So sollte es funktionieren:

Code: Alles auswählen


[Winbatch_install]
; === Inno Setup ================================================================
"%ScriptPath%\$GimpVer$" /SILENT


Vielen Dank für die Nutzung von opsi. Im Forum ist unser Support begrenzt.

Für den professionellen Einsatz und individuelle Beratung empfehlen wir einen Support-Vertrag und eine Schulung.
Gerne informieren wir Sie zu unserem Angebot.

uib GmbH
Telefon: +49 6131 27561 0
E-Mail: sales@uib.de


Benutzeravatar
friedhelm
Beiträge: 48
Registriert: 10 Dez 2009, 15:52

Re: Verknüpfung zweier Variablen im Winst-Skript

Beitrag von friedhelm »

Sehr geehrter Herr Schneider,

vielen Dank für Ihre schnelle und extrem hilfreiche Antwort!

Ja, genau das war das Problem. Nun funktioniert das Skript ohne Probleme.

Vielen Dank noch einmal!

Friedhelm
Antworten