Autor Beitrag
Casimodo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 26

WinXP Pro, Win 98 SE
D7 Enterprise
BeitragVerfasst: Mi 13.04.05 20:18 
Hallo,

ich weiss Fragen zum Pfad ermitteln gabs schon viele. Ich habe auch schon gesucht.

Mein Problem ist folgendes:
Ich habe ein Setup mit InstallShield erstellt und wenn man dieses ausführt werden Shortcouts erstellt bzw. eine Desktopverknüpfung.

Es sollte mit:
ausblenden Delphi-Quelltext
1:
ExtractFilePath(ParamStr(0))					


der Pfad der ".exe" ermittelt werden. Nun ist mein Problem wenn ich die Verknüpfung (.ink) aufrufe ermittelt er wohl nur den Desktop Pfad, nicht aber den Pfad zur Original ".exe" und damit auch nicht den Pfad zum Dateiordner der ".exe"

Wenn ich die Orginal ".exe" aus dem Ordner direkt starte klappt alles wunderbar.

Wie kann ich das beheben?

Gruß Casimodo

_________________
"Bezeugung des Glaubens und Hilfe den Bedürftigen"
Leitsatz der Malteser
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 14.04.05 13:11 
Ich würde statt
ausblenden Delphi-Quelltext
1:
ExtractFilePath(ParamStr(0))					

lieber
ausblenden Delphi-Quelltext
1:
ExtractFilePath(Application.ExeName)					

benutzen, dann sollte das Problem nicht auftauchen.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 14.04.05 13:19 
*hüstel* "Application.ExeName" ist das gleiche wie "paramstr(0)". Wenn du den Delphi-Quellcode der Units hast, schau mal nach. ;)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 14.04.05 13:40 
:oops: Oh, das wusste ich nicht, ich wusste zwar, das beides den Pfad angibt, das es aber wirklich dasselbe ist, nicht.

Ich benutze halt immer Application.ExeName und habe dort noch nie Probleme gehabt, egal von wo oder womit ich mein Programm aufrufe, deshalb dachte ich, na ja, Schwamm drüber.

Aber zurück zu dem Problem:
Was steht denn in der erstellten Verknüpfung auf dem Desktop drin? Ich meine, steht da die Exe und das Arbeitsverzeichnis korrekt drin?
Man kann in InstallShield soweit ich weiß angeben, wo auf dem Zielrechner die mit der zu erstellende Verknüpfung aufzurufende Datei liegt, vielleicht ist das falsch.

Sonst bin ich da erstmal rat- und sprachlos...
Casimodo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 26

WinXP Pro, Win 98 SE
D7 Enterprise
BeitragVerfasst: Do 14.04.05 17:01 
Hallo,

danke ersteinmal für die Antworten.
Es geht nicht darum das er das Programm nicht öffnet sondern das ich bei einer bestimmten Prozedure eine Bild Datei aufrufe und die in dem Ordner "\images" liegt. Diese findet er nicht wenn man die Desktop Verknüpfung aufruft.

Gruß
Heiopei

_________________
"Bezeugung des Glaubens und Hilfe den Bedürftigen"
Leitsatz der Malteser
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 14.04.05 17:22 
Normalerweise kenne ich so ein Problem nur, wenn die Leute vergessen, bei der Verknüpfung das Arbeitsverzeichnis anzugeben. Aber wenn du mit "ExtractFilePath(paramstr(0))" das Verzeichnis deiner Exe ermittelst, dann spielt das eigentlich keine Rolle. :gruebel: Sehr merkwürdig.
Casimodo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 26

WinXP Pro, Win 98 SE
D7 Enterprise
BeitragVerfasst: Do 14.04.05 17:27 
Alle die sich das Problem mal ansehen wollen:

home.arcor.de/webmas...strat-clan/setup.exe

_________________
"Bezeugung des Glaubens und Hilfe den Bedürftigen"
Leitsatz der Malteser
Casimodo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 26

WinXP Pro, Win 98 SE
D7 Enterprise
BeitragVerfasst: Sa 16.04.05 11:58 
Mir ist noch eine Idee gekommen aber leider haperts an der ausführung ;).

Also in der Verknüpfung wird ja der Pfad der zieldatei angegeben, den muss man im Prinzip dann doch nur ermitteln und verwenden. Geht das irgendwie?

Oder hat noch jemand eine Idee.


Gruß
Casimodo

_________________
"Bezeugung des Glaubens und Hilfe den Bedürftigen"
Leitsatz der Malteser
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 16.04.05 15:45 
Das brauchst du doch alles gar nicht. Wenn du wirklich zu 100% sicher bist, dass du in deinem Programm
ausblenden Delphi-Quelltext
1:
ExtractFilePath(paramstr(0)) + '\images'					

benutzt, dann liegt der Fehler irgendwo beim Setup und nicht in deinem Programm. Klar kannst du auch auf die Verknüpfung zugreifen und die Eigenschaften auslesen (Stichwort: Suche in: Delphi-Forum, Delphi-Library "ISHELLLINK"), aber das wäre in dem Fall mit "Kanonen auf Spatzen" schießen. Du kannst in den o.g. Suchergebnissen mal direkt auf die TFolderBrowser-Unit zugreifen. Dort findest du eine Funktion "TranslateLink", die dir das Auslesen des Pfades zeigt. Aber dort hatte das andere Gründe. :lol:
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Sa 16.04.05 17:28 
Also ich würde aus dem Link den Pfad der Anwendung ermitteln, also so wie es MathiasSimmack gesagt hat.

Aber warum hast du dein Projekt überhaupt in ein Setup verlegt? Dein Programm ist 1/2MB groß, aber mit dem Setup sage und schreibe 4MB. Außerdem würde ich es sch**** finden, wenn jedes kleine Programm irgendwo sich bei Systemsteuerung-->Software einträgt.

Noch ne kleine Frage. Für was hast du im Bilder-Ordner ein leeres Bild?
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 16.04.05 19:18 
user profile iconHeiko hat folgendes geschrieben:
Aber warum hast du dein Projekt überhaupt in ein Setup verlegt? Dein Programm ist 1/2MB groß, aber mit dem Setup sage und schreibe 4MB.

Das liegt daran, dass InstallShield in dem Fall auch gleich noch den Microsoft Installer mitliefert. Kann man aber IMHO abstellen. Wenn es aber eine normale Anwendung ohne Komponenten ist, die einen zertifizierten Installer erfordern (die BDE bspw.), dann tut´s sicher auch Inno Setup oder NSIS.

Zitat:
Außerdem würde ich es sch**** finden, wenn jedes kleine Programm irgendwo sich bei Systemsteuerung-->Software einträgt.

Du bist vermutlich ein Profi, oder zumindest ein fortgeschrittener Anwender. Du weißt aber nicht, was das Ziel des Programms ist. Wenn es auf einer Freeware-Seite veröffentlicht werden soll, dann gehört ein vernünftiges Setup, das für mich die Dateien kopiert, Verknüpfungen anlegt, usw., zum Standard. Außerdem gibt es auch unbedarfte User, die froh sind, wenn ihnen ein Setup die Arbeit abnimmt. Und der o.g. Eintrag ist nun mal Standard. Schließlich will man das Programm auch wieder loswerden. ;)


PS:
Zitat:
Also ich würde aus dem Link den Pfad der Anwendung ermitteln, also so wie es MathiasSimmack gesagt hat.

Habe ich überhaupt nicht gesagt. Eher das Gegenteil. :lol: Ich habe davon abgeraten, extra den Pfad aus der Verknüpfung auszulesen. Wozu soll das gut sein? "paramstr(0)" tut´s im Allgemeinen.
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Sa 16.04.05 19:39 
Er kann ja auch überprüfen lassen, ob er wirklich den Pfad mit ParamStr(0) von seine Anwendung bekommt. Wenn nicht ist es am besten die aus der Verknüpfung auszulesen, ansatt die gesamte Festplatte danach absuchen zu lassen, da die Wahrscheinlichkeit da ist das ein anderes Programm den gleichen Exe-Namen hat.

@Casimodo: Kannst ja mal ausprobieren ob es mit dem Speichern auch so geht:
ausblenden Delphi-Quelltext
1:
Bild.SaveToFile('Bilder\Bild1.bmp');					


Ich weiß nicht ob es mit Delphi geht. Ich weiß aber das man es so machen kann bei Internetseiten.

@MathiasSimmack: Ich weiß nicht ob es für einen Anfänger besser ist, tausend Programme unter Systemsteuerung-->Software zu finden, wo man stundenlang nach dem Programm dan sucht. Und ich würde auch einen Installer selber programmieren, der eine Verknüpfung auf den Desktop und ins Startmenü erstellt; aber keinen Eintrag bei Software!!!!
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 16.04.05 19:58 
user profile iconHeiko hat folgendes geschrieben:
Er kann ja auch überprüfen lassen, ob er wirklich den Pfad mit ParamStr(0) von seine Anwendung bekommt.

Das hätte ich schon längst gemacht, wäre ich an der Stelle des Themenerstellers.

Zitat:
Wenn nicht ist es am besten die aus der Verknüpfung auszulesen,

Nein, dann ist es am besten, nach der Ursache zu forschen, denn "paramstr(0)" gibt eigentlich immer den Pfad und Namen des aufgerufenen Programms aus. Eine Ausnahme sind möglicherweise DLLs. Ich weiß gerade nicht, ob die mit "paramstr(0)" sich selbst oder auch die Exe, von der sie benutzt werden, liefern.

Zitat:
@MathiasSimmack: Ich weiß nicht ob es für einen Anfänger besser ist, tausend Programme unter Systemsteuerung-->Software zu finden, wo man stundenlang nach dem Programm dan sucht.

Ich weiß nicht, ob es für einen Anfänger sinnvoll ist, ihm eine ZIP zu geben und eine Textdatei dazu zu packen, in der dann bloß steht: "Kopieren Sie Datei A nach B, und legen Sie auch einen Registryeintrag an, damit das Programm aus dem Explorer heraus gestartet werden kann, ..."

Zitat:
Und ich würde auch einen Installer selber programmieren, der eine Verknüpfung auf den Desktop und ins Startmenü erstellt; aber keinen Eintrag bei Software!!!!

Kann man mit Inno Setup und NSIS unterbinden, wenn man denn möchte. Aber es gibt da eine so genannte "Logo-Richtlinie", die vorschreibt, wie sich ein Setup (das den Namen Setup auch verdient) zu verhalten hat.

Letzten Endes könnten wir uns ewig darüber unterhalten und würden uns vllt. nie einigen. Darum schlage ich vor, wir lassen das und warten erst mal auf den Themenersteller.
Casimodo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 26

WinXP Pro, Win 98 SE
D7 Enterprise
BeitragVerfasst: So 17.04.05 18:18 
Titel: Lösung gefunden!
Hallo,

danke für die Anworten!

Wenn ich eine Datei öffnen will muss man also immer
ExtractFilePath(paramstr(0)) + '\images'dahinter setzen. Das hatte ich vergessen.


So und um die anderen aufgekommenden Fragen noch zu beantworten:

Warum das leer.bmp?

Dieses Bild gebrauche ich dann vor der "Druckvorschau" nicht 12 Aufgaben berrechnet wurden. Da sonst Bildblub.bmp nicht gefunden kommt und es wird nicht angezeigt. Und darum leer.bmp als Platzhalter.

Warum InstallShield?
Weil ich damit am besten klar komme und es am einfachsten finde.

Gruß und Danke nochmal
Casimodo

_________________
"Bezeugung des Glaubens und Hilfe den Bedürftigen"
Leitsatz der Malteser
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: So 17.04.05 18:23 
Übrigens: Das "\" vor images ist unnötig.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 17.04.05 18:29 
Es stört aber auch nicht. Und bei "ExtractFileDir" wäre es bspw. notwendig.
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: So 17.04.05 18:52 
user profile iconMathiasSimmack hat folgendes geschrieben:
Es stört aber auch nicht.
In diesem Fall nicht, aber nicht alle Applikationen handeln den Fall richtig. Wenn die Pfadangabe in eine solche Applikation gelangen würde, hättest du Pech. Vor allem ist es aber unsauber.

user profile iconMathiasSimmack hat folgendes geschrieben:
Und bei "ExtractFileDir" wäre es bspw. notwendig.
Was möchtest du mit dieser Bemerkung sagen? Der einzige Unterschied zwischen ExtractFilePath und ExtractFileDir ist ja genau eben dieses letzte "\".
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: So 17.04.05 18:59 
Er will damit sagen, dass es besser ist, dass man das '\' hinzufügt wenn man nicht weiß ob das Zeichen nun mitkopiert wird ider nicht :wink: . Oder hab ich dich, MathiasSimmack, falsch interpretiert?
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: So 17.04.05 19:12 
user profile iconHeiko hat folgendes geschrieben:
Er will damit sagen, dass es besser ist, dass man das '\' hinzufügt wenn man nicht weiß ob das Zeichen nun mitkopiert wird

1.) ExtractFilePath liefert den Eingabestring bis und mit letztes "\" zurück.
2.) Kommt gar kein "\" vor, ist das Resultat leer (was bei Paramstr(0) aber nie der Fall ist). In diesem hypothetischen Fall wäre es sogar besser, nicht noch künstlich ein "\" anzuhängen, da dann fälschlicherweise das Root-Verzeichnis gemeint wäre (statt aktuelles Verzeichnis).

Also: Entweder ExtractFileDir, wenn du bloss den Verzeichnisnamen wissen möchtest; oder ExtractFilePath, wenn du dann noch was anhängen möchtest.
Blawen
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 616
Erhaltene Danke: 33

Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
BeitragVerfasst: So 17.04.05 19:39 
user profile iconHeiko hat folgendes geschrieben:
@Casimodo: Kannst ja mal ausprobieren ob es mit dem Speichern auch so geht:
ausblenden Delphi-Quelltext
1:
Bild.SaveToFile('Bilder\Bild1.bmp');					

Wenn man jetzt noch den Pfad angeben würde... :?