Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Mein Programm funktioniert nicht über eine Verknupfung richtig ! (https://www.delphipraxis.net/155776-mein-programm-funktioniert-nicht-ueber-eine-verknupfung-richtig.html)

thomas2009 7. Nov 2010 21:22


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';

wicht 7. Nov 2010 21:24

AW: Mein Programm funktioniert über eine Verknupfung
 
Eventuell wegen dem "working directory"?

thomas2009 7. Nov 2010 21:31

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';

wicht 7. Nov 2010 21:38

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'
.

thomas2009 7. Nov 2010 21:57

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 ?

Bummi 7. Nov 2010 22:04

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.

thomas2009 7. Nov 2010 22:21

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:
[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.
quelle:
http://webcache.googleusercontent.co...&ct=clnk&gl=de

Wie gesagt, ich habe die Version Inno Setup 5.3.10
Aber bei der Version 5.3.11 wurde das Problem behoben
http://webcache.googleusercontent.co...&ct=clnk&gl=de

Bummi 7. Nov 2010 22:44

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.

wicht 7. Nov 2010 22:47

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..).

Bummi 7. Nov 2010 23:00

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:
 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;
benötigt uses ShlObj, ActiveX, ComObj;

taveuni 8. Nov 2010 07:39

AW: Mein Programm funktioniert über eine Verknupfung
 
Zitat:

Zitat von thomas2009 (Beitrag 1060300)
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

Bist Du Dir sicher dass Du nicht 5.3.11 verwendest.
Da hat nämlich was geändert.

Ansonsten im InnoSetupForum nachfragen.

Caps 8. Nov 2010 11:44

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

ChrisE 8. Nov 2010 13:13

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:
ChDir(ExtractFilePath(Application.Exename));
Ich denke, das würde schon viel Helfen ;-)

Gruß, Chris

himitsu 8. Nov 2010 13:31

AW: Mein Programm funktioniert über eine Verknupfung
 
Zitat:

Zitat von ChrisE (Beitrag 1060370)
Ich denke, das würde schon viel Helfen ;-)

Falsch.

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.

ChrisE 8. Nov 2010 13:59

AW: Mein Programm funktioniert über eine Verknupfung
 
Zitat:

Zitat von himitsu (Beitrag 1060373)
Falsch.

Harte Worte großer Meister ;-)
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:

Zitat von himitsu (Beitrag 1060373)
Ergo bleibt als einzige Lösung das Programm so zu schreiben, daß ihm das Arbeitsverzeichnis "egal" ist.

Gruß, Chris

wicht 8. Nov 2010 14:17

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:
Temp :=GetEnvironmentVariable('Temp');
MediaPlayer.FileName :=Temp +'\video1.avi';
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.
Sprich, thomas2009 sollte mal überprüfen, ob die Dateien überhaupt da liegen, wo er sie vermutet.. Oder hat das schon jemand gesagt?

DeddyH 8. Nov 2010 18:16

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.

thomas2009 8. Nov 2010 21:13

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?

mkinzler 8. Nov 2010 21:14

AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
 
Am Besten keine relativen Pfade in dieser Form verwenden!

thomas2009 8. Nov 2010 21:52

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

wicht 8. Nov 2010 22:06

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.

Assarbad 8. Nov 2010 23:01

AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
 
Zitat:

Zitat von wicht (Beitrag 1060475)
[...] oder Karldoof-Setup [...]

Link bitte! Inno kenne ich, NSIS auch, Setup2Go habe ich gefunden ...

wicht 8. Nov 2010 23:05

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.

thomas2009 8. Nov 2010 23:41

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

Sir Rufo 9. Nov 2010 01:37

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

mkinzler 9. Nov 2010 05:27

AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
 
Zitat:

Ich wollte versuchen was in Delphi-Programm zu ändern (z.B. mit Absolute Pfad statt relativ)
Besser den relativen als absoluten zusammensetzen

wicht 9. Nov 2010 07:08

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:

thomas2009 9. Nov 2010 10:37

AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
 
Zitat:

Zitat von Sir Rufo (Beitrag 1060490)
...
Einfach mal im Programm einen OpenDialog einbauen. Dieser positioniert das WorkingDir automatisch auf den gewählten Ordner im OpenDialog. Und dann ist man verlassen...

Aber meine Videos werden direkt durch ein Klick aufgerufen (geladen) und nicht durch einen OpenDialog

Zitat:

Zitat von wicht (Beitrag 1060506)
Toll, wenn das neue Inno das kann. Damit hast du das Problem einfach nur verschoben und irgendwann holt es dich wieder ein

Du hast vollig Recht aber was ist nun die alternative Lösung ?

DeddyH 9. Nov 2010 10:41

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.

Luckie 9. Nov 2010 10:45

AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
 
Und wenn der Benutzer manuell das Arbeitsverzeichnis ändert?

DeddyH 9. Nov 2010 10:47

AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
 
Was soll dann sein?

thomas2009 9. Nov 2010 13:34

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

Luckie 9. Nov 2010 13:40

AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
 
Zitat:

Zitat von DeddyH (Beitrag 1060534)
Was soll dann sein?

Dann funktioniert sein Programm wieder nicht.

DeddyH 9. Nov 2010 13:49

AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
 
Wenn er absolute Pfade verwendet, kann ihm das Arbeitsverzeichnis doch völlig wurscht sein :gruebel:

Luckie 9. Nov 2010 13:50

AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
 
Ja, jetzt.

DeddyH 9. Nov 2010 13:57

AW: Mein Programm funktioniert nicht über eine Verknupfung richtig !
 
Zitat:

Zitat von thomas2009 (Beitrag 1060529)
Du hast vollig Recht aber was ist nun die alternative Lösung ?

Zitat:

Zitat von DeddyH (Beitrag 1060531)
Das wurde doch schon mehrfach genannt: alle(!!) relativen Pfade eliminieren und durch absolute ersetzen. Letztere können ggf. zur Laufzeit ermittelt werden.

Zitat:

Zitat von Luckie (Beitrag 1060533)
Und wenn der Benutzer manuell das Arbeitsverzeichnis ändert?

Da haben sich wohl Postings überschnitten, oder?


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