![]() |
Mein Programm funktioniert nicht über eine Verknupfung richtig !
Hallo
ich verstehe nicht warum funktioniert mein Programm richtig, nur wenn ich das Programm direkt im Programmverzeichnis starte ! Aber wenn ich mein Programm durch eine Verknüpfung (durch das Icon auf Desktop) aufrufe, dann können alle Dateien wie Videos, die ich in mein Programm lade nicht gefunden werden) !!! Was ist der Unterschied, wenn ich das Programm direkt aufrufe oder durch eine Verknüpfung ? Ich lade meine Videos in Mediaplayer Komponent : MediaPlayer.FileName :=Temp +'\video1.avi'; |
AW: Mein Programm funktioniert über eine Verknupfung
Eventuell wegen dem "working directory"?
|
AW: Mein Programm funktioniert über eine Verknupfung
Was meinst du bitte mit "working directory" ?
Als Hinweis So wird der Pfad gebaut : Temp :=GetEnvironmentVariable('Temp'); MediaPlayer.FileName :=Temp +'\video1.avi'; |
AW: Mein Programm funktioniert über eine Verknupfung
Benutz einfach beim Dateizugriff als Pfad nicht 'ordner\datei.ext', sondern sowas wie
Delphi-Quellcode:
.
IncludeTrailingBackslash(ExtractFilePath(Application.ExeName)) + 'ordner\datei.exe'
|
AW: Mein Programm funktioniert über eine Verknupfung
Was Bummi am Anfang geschrieben hat, konnte das Problem sein
Wenn ich eine die Verknüpfung selbe erstellen, dann geht Aber die Verknüpfung, die von dem Setup-Programm (Inno) erstellt werden, funktionieren nicht Und noch was. Die Verknüpfung-Eigenschaften von Inno steht nur der Ziel-Pfad Aber Ausführen : Leer Kann das das Problem sein ? |
AW: Mein Programm funktioniert über eine Verknupfung
ja, wir hatte vor kurzem ein ähnlich fehlerhaftes Setup erstellt, es aber glücklicherweise in der Testphase noch bemerkt.
|
AW: Mein Programm funktioniert über eine Verknupfung
Du Hast dann Glück gehabt ;)
Und die Lösung jetzt ! Kann ich das Problem bei dem Toll "Inno" korrigieren oder was ? :( Ich verwende Inno Setup v5.3.10 Oder kommen wir zurück was @wicht geschrieben haben von "working directory" ?
Delphi-Quellcode:
quelle:
[Icons]
; NOTE: Ensure that you always include and set the WorkingDir. ; Filename is the "Target" parameter in your properties ; WorkingDir is the "Start In" parameter in your properties ; This is where the current directory will be set in your program at start up. ![]() Wie gesagt, ich habe die Version Inno Setup 5.3.10 Aber bei der Version 5.3.11 wurde das Problem behoben ![]() |
AW: Mein Programm funktioniert über eine Verknupfung
Leider muß ich hier passen, wir verwenden kein INNO.
Bei uns ist InstallAware im Einsatz, hier fehlte einfache eine Eigenschaft für das Arbeitsverzeichnis. |
AW: Mein Programm funktioniert über eine Verknupfung
Dann müsste an das Icon wohl sowas wie "WorkingDir: {app}" mit angegeben werden. Finde ich aber unschön, besser ist es meiner Meinung nach, wenn das Programm vom Ort der .exe ausgeht, wenn es Dateien sucht (wie schon oben beschrieben..).
|
AW: Mein Programm funktioniert über eine Verknupfung
ich gebe "wicht" recht, besser ist es wenn die Anwendung nicht abhängig ist.
Falls Du das mit INNO nicht in den Griff bekommst kannst Du theoretisch ganz schmutzig auch die Verknüpfung aus dem Programm heraus erstellen / reparieren
Delphi-Quellcode:
benötigt uses ShlObj, ActiveX, ComObj;
var
IObject : IUnknown; ISLink : IShellLink; IPFile : IPersistFile; PIDL : PItemIDList; InFolder : array[0..MAX_PATH] of Char; TargetName : String; LinkName : WideString; begin TargetName := Application.ExeName; IObject := CreateComObject(CLSID_ShellLink) ; ISLink := IObject as IShellLink; IPFile := IObject as IPersistFile; with ISLink do begin SetPath(pChar(TargetName)) ; SetWorkingDirectory(pChar(ExtractFilePath(TargetName))) ; end; SHGetSpecialFolderLocation(0, CSIDL_DESKTOPDIRECTORY, PIDL) ; SHGetPathFromIDList(PIDL, InFolder) ; LinkName := InFolder + '\MeinProgramm.lnk'; IPFile.Save(PWChar(LinkName), false) ; end; |
AW: Mein Programm funktioniert über eine Verknupfung
Zitat:
Da hat nämlich was ![]() Ansonsten im ![]() |
AW: Mein Programm funktioniert über eine Verknupfung
Vielleicht übersehe ich was, aber wäre es nicht einfacher, einfach die Verknüpfung (die .lnk-Datei) per Hand zu ändern? Da gibt es ja eine Möglichkeit, das Arbeitsverzeichnis festzulegen. Das geht doch immer und unabhängig vom Programm das gestartet werden soll.
Caps |
AW: Mein Programm funktioniert über eine Verknupfung
Hallo thomas2009,
wenn ich Dich richtig verstehe, geht es Dir darum, dass beim Start Deiner Software immer der Applikationspfad der "aktive" Pfad sein soll. In dem Fall wäre die Lösung relativ einfach, da du das Programm ja selber schreibst :-) Einfach in der DPR als eine der ersten Anweisungen ein
Delphi-Quellcode:
Ich denke, das würde schon viel Helfen ;-)
ChDir(ExtractFilePath(Application.Exename));
Gruß, Chris |
AW: Mein Programm funktioniert über eine Verknupfung
Zitat:
Hat man jetzt oder zukünftig mal einen Befehl/Code drin, dessen Auswirkung es ist, daß sich das Arbeitsverzeichnis verändert, dann knallt es wieder. Ergo bleibt als einzige Lösung das Programm so zu schreiben, daß ihm das Arbeitsverzeichnis "egal" ist. |
AW: Mein Programm funktioniert über eine Verknupfung
Zitat:
Es funktioniert Zunächst einmal schon so, allerdings unter der Prämisse, dass es für den Start der Software gedacht ist (so hatte ich es auch geschrieben). Es ist absolut richtig, dass es nichts bringt für die gesamte Laufzeit des Programms. Hier gilt Deiner Aussage ganz klar: Zitat:
|
AW: Mein Programm funktioniert über eine Verknupfung
Was mich aber an dieser Stelle wundert ist, dass die Daten ja wie vom TE gesagt wurde, so geladen werden:
Delphi-Quellcode:
Dann müsste das Arbeitsverzeichnis aber egal sein, oder? Hier geht es dann wohl nicht darum, dass die Dateien nicht geöffnet werden können, sondern seine Videos aus Resourcen nicht extrahiert werden können, wohl weil die eigene Exe nicht geöffnet werden kann, dank des Arbeitsverzeichnisses.
Temp :=GetEnvironmentVariable('Temp');
MediaPlayer.FileName :=Temp +'\video1.avi'; Sprich, thomas2009 sollte mal überprüfen, ob die Dateien überhaupt da liegen, wo er sie vermutet.. Oder hat das schon jemand gesagt? |
AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
Das sehe ich auch so, es scheint, dass sie woanders hin extrahiert werden. Dies wiederum ließe auf einen Verstoß gegen das DRY-Prinzip schließen. Aber das sind alles natürlich nur Vermutungen.
|
AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
Also mit "WorkingDir" hat nicht das Problem gelöst, obwohl in Inno-Hilfe als Lösung steht !
[Icons] Name: "{group}\myprogramm"; Filename: "{app}\myprogramm.exe"; WorkingDir: "{app}" Was ist nun die beste Lösung bei Inno? |
AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
Am Besten keine relativen Pfade in dieser Form verwenden!
|
AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
Das Problem liegt vermutlich nicht nur an Inno. Ich habe gerade ein andres Setup-Programm "Setup2go" getestet. Es ist das selbe Problem
Also ich muß dann die Änderung in mein Delphi-Programm tun |
AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
Und jetzt, zum aller letzten mal, hör auf das, was die Leute sagen.
Mag sein, dass Inno-Setup oder andere das nicht korrekt erledigen, aber das eigentliche Problem liegt in deinem Programm! Also verbesser dein Programm und du bekommst solche Probleme gar nicht erst. Dann kannst kannst mit Inno, Setup2Go oder Karldoof-Setup dein Programm installieren und es funktioniert einfach immer... Und wie das geht steht auf der ersten Seite dieses Threads, siehe meinen Post dort. Verzeih mir den Ton, aber ich bekomme das Gefühl, dass du etwas beratungsresistent bist. |
AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
Zitat:
|
AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
Finde ich leider auch nicht mehr :|
Man könnte es aber noch programmieren. Mit einem herausragenden Premium-Feature: Funktionierende Working-Dirs in Verknüpfungen... Gute Nacht. |
AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
Das Problem liegt nicht an mein Delphi-Programm sondern an Inno
Ich wollte versuchen was in Delphi-Programm zu ändern (z.B. mit Absolute Pfad statt relativ) Hat aber das Problem nicht behoben Nun habe ich mit Inno neue Version (v5.4.0 statt 5.3.10) getestet dann funktioniert es ;) In der Webseite von Inno steht auch als Hinweiß, dass die Inno alte Versionen das Problem haben |
AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
Ich habe das Problem mit Inno nie gehabt (und alle Setups baue ich mit Inno), da man sich auf WorkingDir nie verlassen kann.
Einfach mal im Programm einen OpenDialog einbauen. Dieser positioniert das WorkingDir automatisch auf den gewählten Ordner im OpenDialog. Und dann ist man verlassen. Windows bietet eine Vielzahl von Speicherorten als SpecialFolders an, die man auch fleißig nutzen sollte. Aber jeder gräbt sich halt sein eigenes Grab. Und wenn man beim Schwimmen absäuft ist die Badehose Schuld |
AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
Zitat:
|
AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
Toll, wenn das neue Inno das kann. Damit hast du das Problem einfach nur verschoben und irgendwann holt es dich wieder ein, vielleicht wenn ein User das Programm über eine eigene Verknüpfung startet, oder es mit cmd.exe startet, während er sich nicht im Verzeichnis deiner Anwendung befindet, und so weiter. Aber das interessiert dich ja nicht, man könnte schon fast denken, dass du nicht ließt, was hier geschrieben wird...
Aber dann kannst du ja einen neuen Thread aufmachen, dann sagen wir dir zwar wieder das gleiche, aber wenn man ganz fest dran glaubt, redet man sich dann einfach ein, dass Windows kaputt ist, dein Programm hat ja über die Verknüpfung vom Setup immer funktioniert :wall: |
AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
Zitat:
Zitat:
|
AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
Das wurde doch schon mehrfach genannt: alle(!!) relativen Pfade eliminieren und durch absolute ersetzen. Letztere können ggf. zur Laufzeit ermittelt werden.
|
AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
Und wenn der Benutzer manuell das Arbeitsverzeichnis ändert?
|
AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
Was soll dann sein?
|
AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
Ich habe Stunden Lang die Sache (die Möglichkeiten) getestet
ALSO ES HAT MIT DER NEUEN VERSION VON INNO V5.4.0 GEKLAPPT OHNE ÄNDERUNG IN MEINEM DELPHI-PROGRAMM ABER DA DIE LEUTE MIR DEN ABSOLUTEN PFAD STATT DEN RELATIVEN ZU NEHMEN EMPFOHLEN HABEN, HABE ICH FÜR SICHERHEIT DIE BEIDE VARIANTEN GENOMMEN: 1- Alle Pfade als absolut gegeben 2- Die Setup Datei mit der neuen Version von Inno (5.4.0) erstellt Und ist das Problem gelöst :-D |
AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
Zitat:
|
AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
Wenn er absolute Pfade verwendet, kann ihm das Arbeitsverzeichnis doch völlig wurscht sein :gruebel:
|
AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
Ja, jetzt.
|
AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
Zitat:
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz