Seite 1 von 1

Verknüpfung zweier Variablen im Winst-Skript

Verfasst: 17 Dez 2010, 20:52
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

Re: Verknüpfung zweier Variablen im Winst-Skript

Verfasst: 18 Dez 2010, 00:13
von d.oertel
Hi,

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

gruss
d.oertel

Re: Verknüpfung zweier Variablen im Winst-Skript

Verfasst: 18 Dez 2010, 10:00
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

Re: Verknüpfung zweier Variablen im Winst-Skript

Verfasst: 18 Dez 2010, 18:42
von j.schneider
Bitte Variablen ($) und Kostanten (%) nicht verwechseln...
So sollte es funktionieren:

Code: Alles auswählen


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


Re: Verknüpfung zweier Variablen im Winst-Skript

Verfasst: 18 Dez 2010, 19:15
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