Forum: PC-Programmierung Innosetup - Script erstellen


von Inno starter (Gast)


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??

von Inno starter (Gast)


Lesenswert?

Ich weiß, ich hätte meinen Code anders formatieren sollen. Kann ihn nur 
nun leider nicht mehr ändern...

von hiall (Gast)


Lesenswert?

ist der pfad nicht in {app} gespeichert oder versteh ich dein Problem 
nicht

von Inno starter (Gast)


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.

von Twinsetter (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.