1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

InnoSetup: Programm startet bzw. Programmpfad suchen

Dieses Thema im Forum "Pascal" wurde erstellt von sunshineh, 5. November 2013.

  1. sunshineh

    sunshineh New Member

    Hi,
    ich habe mir aus den einzelnen Examples einen Installer
    "zusammenkopiert", der nun soweit funktioniert.
    Ich kann nur C und C++ aber kein Pascal, darum habe ich bei der
    Erstellung einige Verständnisschwierigkeiten:

    Ich habe ja folgende Funktion für den Deinstaller
    Code:
    procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
    var
      i : Integer;
      ValueNames : TArrayOfString;
      FileInstallPath : String;
    begin
      if (RegGetValueNames(HKEY_LOCAL_MACHINE,
    ExpandConstant(UNINSTALL_SUBKEY + '\{#ApplicationName}'), ValueNames))
    then begin
        for i := 0 to GetArrayLength(ValueNames) - 1 do begin
          if (RegQueryStringValue(HKEY_LOCAL_MACHINE,
    ExpandConstant(UNINSTALL_SUBKEY + '\{#ApplicationName}'), ValueNames[i],
    FileInstallPath)) then begin
            if (DeleteFile(FileInstallPath)) then begin
              RegDeleteValue(HKEY_LOCAL_MACHINE,
    ExpandConstant(UNINSTALL_SUBKEY + '\{#ApplicationName}'),
    ValueNames[i]); end;
          end;
        end;
      end;
    end;
    
    Diese funktioniert wunderbar. Nun möchte ich im Anschluss an die
    Installation die exe des Programms noch starten. Dies funktioniert ja
    normalerweise so:

    Code:
    [Run]
    Filename: "{app}\{#AppExeName}"; Description:
    "{cm:LaunchProgram,{#StringChange(ApplicationName, '&', '&&')}}"; Flags:
    nowait postinstall skipifsilent
    
    Ich habe nur leider den Pfad nicht, da dieser anhand der Registry-Keys
    automatisch herausgesucht wurde. In der Uninstaller-Funktion steckt er ja
    in der Variablen: "FileInstallPath", aber kann ich auch unter [RUN]
    darauf zugreifen?
    Wenn ja, wie??
    Oder ist das wie in C, dass diese Variable nur innerhalb der procedure (=Funktion) gültig ist??
  2. Diogenes

    Diogenes Member c-b Team

    Ja, die Variable, ist so, wie sie deklariert ist, nur innerhalb der Prozedur gültig. Du kannst sie aber aaußerhalb der Prozedur als globale Variable definieren. Das ist wohl der einfachste Weg, den Wert auch anderen Prozeduren zur Verfügung zu stellen.