Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem beim Starten des Programms via Datenverknüpfung (https://www.delphipraxis.net/151741-problem-beim-starten-des-programms-via-datenverknuepfung.html)

Chaoten-Joe 30. Mai 2010 21:02


Problem beim Starten des Programms via Datenverknüpfung
 
Hallo zusammen,

ich habe folgendes Problem und keine Ahnung, ob es am Programm oder falschen Verknüpfung in der Registry liegt.

Sachverhalt:
Mein Programm funktioniert problemlos und hat eine integrierte Datensicherung. Nun habe ich seit der letzten Installation via Inno-Setup die Dateiendung *.gds in der Registry als "Datensicherungsdatei für mein Programm" hinterlegt. Durch einen Doppelklick auf die Datei soll sich mein Programm öffnen (Parameter werden übergeben) und die Datensicherung eingearbeitet werden. Wird auch alles super in Windows angezeigt und auch der Aufruf funktioniert.

Die Datensicherungen können von verschiedenen Benutzern ausgetauscht werden und liegen daher zuerst meist auf einem USB-Stick, auf CD oder in einem temp. Verzeichnis vor

Das Problem ist folgendes:
Dadurch, dass die Datensicherungsdatei meist an irgendeinem beliebigen Ort ist (nur eben nicht im Programmverzeichnis) ... bricht der Programmstart mit einem Fehler ab. Es müsste irgendwie an das Programm ein "Ausführen in"-Parameter übergeben werden.

Zum Vergleich: In den Eigenschaften des Desktop-Icons ist ja das Programmverzeichnis bei "Ausführen in" vermerkt. Ist dort nichts eingegeben, funktioniert der Programmstart auch nicht. War bisher auch kein Problem. ABER JETZT!

Wo liegt das Problem? Kann ich beim Doppelklick auf eine Windows-Datei und beim Einlesen der Parameter "irgendwie" sicherstellen, dass die Datei auch im Arbeitsverzeichnis ausgeführt wird?

Ich hoffe, ich habe das Problem einigermaßen schildern können. Ich denke, es ist kein Inno-Problem (Anzeige funktioniert, Klick funktioniert, Programm startet auch).

Zur Info: So ist der Dateityp registriert:
Delphi-Quellcode:
[Registry]
;Mit dieser Anweisung wird ein Registryschlüssel namens ".gds" erzeugt
Root: HKCR; Subkey: ".gds"; ValueType: string; ValueName: ""; ValueData: "GDS.File"; Flags: uninsdeletevalue
;TYpenSchlüssel erstellen
Root: HKCR; Subkey: "GDS.File"; ValueType: string; ValueName: ""; ValueData: "Datensicherung der Gebietskartei"; Flags: uninsdeletekey
;Icon Zuordnen
Root: HKCR; Subkey: "GDS.File\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\gebiete.exe,1"
;Aktion beim Klicken festlegen
Root: HKCR; Subkey: "GDS.File\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\gebiete.exe"" ""restorebackup"" ""%1""";
;Beschreibung der Aktion festlegen
Root: HKCR; Subkey: "GDS.File\shell\open"; ValueType: string; ValueName: ""; ValueData: "Öffnet die Gebietskartei und startet die Datenwiederherstellung";
Danke für einen Tipp!
Und vielen Dank vorab!

Christian

SirThornberry 30. Mai 2010 21:04

Re: Problem beim Starten des Programms via Datenverknüpfung
 
Zitat:

bricht der Programmstart mit einem Fehler ab
Der genaue Fehler wäre interessant.
Aber dein Problem klingt danach das du irgendwo relative Pfade verwendest.

DP-Maintenance 30. Mai 2010 21:09

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Sonstige Fragen zu Delphi" verschoben.
In die Code-Library gehören nur funktionierende Codes (= Nachschlagewerk)

Chaoten-Joe 30. Mai 2010 21:12

Re: Problem beim Starten des Programms via Datenverknüpfung
 
Es ist meine eigene Fehlermeldung á la "Es ist ein Fehler beim Initialisieren der DB aufgetreten" ...
Ich arbeite eigentlich immer mit absoluten Pfaden: Pfad beim Starten der *.exe einlesen und darauf aufbauen.

Aber daran könnte es auch liegen. Denn ich starte (durch die Dateiverknüpfung) ja ganz woanders ...
Wie kann ich das umgehen???

SirThornberry 30. Mai 2010 21:18

Re: Problem beim Starten des Programms via Datenverknüpfung
 
Umgehen ist zwar ein schlechter Weg (Ursache beseitigen ist besser als den Fehler zu vertuschen) aber ein Weg wäre am besten noch in der Projektdatei bevor irgendwas anderes passiert das CurrentDirectory zu setzen.

Chaoten-Joe 30. Mai 2010 21:52

Re: Problem beim Starten des Programms via Datenverknüpfung
 
Super! Hat geklappt! Habe folgendes gemacht, da in der Registry der Programmpfad gespeichert ist:
Delphi-Quellcode:
begin
  Reg := TRegistry.Create;
  try
    //Reg.RootKey := HKEY_LOCAL_MACHINE;
    Reg.RootKey := HKEY_CURRENT_USER;
    Reg.OpenKey('\Software\Gebietskartei',True);
    with Reg do
    begin
      try
        Mainroot:=ReadString('Path');
      except end;
    end;
  finally
    Reg.CloseKey;
    Reg.Free;
  end;
  if Mainroot<>'' then SetCurrentDir(Mainroot);
  Application.Initialize;
  ...
... und habe dann zuvor noch folgenden Code eingebaut:
Delphi-Quellcode:
function SetCurrentDir(const ADir: string): Boolean;
begin
  Result := SetCurrentDirectory(PChar(ADir));
end;
Er liest nun den korrekten Pfad aus der Registry ein und setzt den Pfad vor der Erstellung aller Formulare. Klasse!

Danke und schönen Abend!
Das ging aber echt fix!


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz