Innosetup - Script erstellen

Gast #3389979
Lesenswert?
• ▲
▼
Hi,
ich habe mitbekommen, dass hier einige InnoSetup-Profis sind.
Im Inno-Setup Forum wollen sie mich nicht (anscheindend weil ich eine 
gmx-Adresse habe), darum meine Hoffnung dass mir hier wer weiterhelfen 
kann.

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;
[\code]

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
[\code]

Ich habe nur leider den Pfad nicht, da dieser anhand der Registry-Keys 
automatisch herausgesucht wurde. In der Uninstallerfunktion 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??
Gast #3390041
Lesenswert?
• ▲
▼
Nein, leider nicht.
Der Pfad wird nur temporär über die Registry bestimmt. Und ich weiß 
nicht, wie ich die Info aus dieser Procedure speichern und in den 
Run-Befehl übertragen kann.

Ich habe mir bereits einen String "path" erstellt, den Pfad in der 
Procedure abgespeichert, und wollte ihn wie folgt verwenden
1
[run]
2
Filename: path; Description:path; Flags: nowait postinstall skipifsilent

geht aber nicht :-(
Ich denke die Variable path war nur Lokal gespeichert.
Gast #3404807
Lesenswert?
• ▲
▼
Hallo Inno Starter,

der Pfad zu Deiner Anwendung ist nach der Installation in der globalen 
Variablen {app} gespeichert. Diese Variable zeigt immer auf das 
Installationsverzeichnis, welches Dir während der Installation angezeigt 
wird. Die Variable zeigt auch dann auf dieses Verzeichnis wenn Du es auf 
der entsprechenden Seite des Installers geändert hast.

Dieser Eintrag Deiner Zeile {#AppExeName} deutet darauf hin, daß Du den 
Präprozessor benutzt. Bist Du Dir sicher, daß diese Variable auch 
wirklich Dein Programm enthält?
Wie lautet denn die "DestDir" Deiner Exe in der Section [Files]? Poste 
mal die Zeile. Wenn Du nämlich die Exe nicht nach {app} sondern z.B. 
nach {app}\bin kopierst, dann müßte Deine Zeile
1
Filename: "{app}\bin\{#AppExeName}"; Description:....
heißen.
Lasse mal probeweise alle Schörkel weg und schreibe folgende Zeile rein:
1
Filename: "{app}\Deine.Exe"; Description:"Programm ausführen"; Flags: nowait postinstall skipifsilent

Diese Zeile sollte Dein Programm eigentlich starten.

Gruß Twinsetter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren