InnoSetup: Programm startet bzw. Programmpfad suchen

#1
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
Pascal:
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??
 

Diogenes

Well-Known Member
c-b Team
#2
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.
 
Oben