Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Shellexecute Problem (https://www.delphipraxis.net/164180-shellexecute-problem.html)

danu1104 1. Nov 2011 18:45

Shellexecute Problem
 
Hallo :)

Ich habe ein Problem und zwar öffne ich im Temp ordner eine Datei, die soll aber in einem ordner auf dem Desktop zeigen also mit WorrkingDir ExtractFilePath(Paramstr(0)) das funktioniert aber nicht er such die datein im Temp Ordner , warum?!

Code:
shellexecute(handle,'open','..\temp\datei.exe',nil,Pchar(ExtractFilePath(Paramstr(0))),SW_SHOW);

DeddyH 1. Nov 2011 18:48

AW: Shellexecute Problem
 
Ist denn "datei.exe" von Dir?

danu1104 1. Nov 2011 18:52

AW: Shellexecute Problem
 
Zitat:

Zitat von DeddyH (Beitrag 1133859)
Ist denn "datei.exe" von Dir?

Habe für einen Kollegen einen Updater gecodet , sein Program ist mit ExeOutput gemacht also für PHP http://www.exeoutput.com/.

Dieses Programm benötigt paar php dlls, und die suht er im ordner Temp\Data\Ext statt im ProjectOrdner\Data\Ext

updater .exe liegt im ProjectOrdner daher dachte ich es funktioniert mit ExtractFilePath(...

DeddyH 1. Nov 2011 18:55

AW: Shellexecute Problem
 
Ich kenne das Programm jetzt nicht, aber wäre es nicht möglich, dass es die DLLs auch im eigenen Verzeichnis sucht statt im aktuellen Arbeitsverzeichnis? In dem Fall kannst Du nämlich übergeben, was Du willst, es wird nie klappen, solange Du das Programm von woanders startest.

himitsu 1. Nov 2011 18:56

AW: Shellexecute Problem
 
Als Programmierer kann man das Arbeitsverzeichnis auch "ignorieren".
Und schon wäre diese Vorgabe völlig sinnlos.

Solche relativen Pfade, wie du ihn grade nutzt, also mit . und .. , verwendet man einfach nicht.

Denn genau wegen solchen verbogenen Arbeitsverzeichnissen, ist es nicht einfach zu sagen, wohin soein relativer Pfad schlußendlich zeigt. :stupid:


[add]
Windows sucht die DLLs und das sucht niemals im Arbeitsverzeichnis (denn die haben da ordentlich gearbeitet), sondern nur im Programmverzeichnis und z.B. in den Systemverzeichnissen.

danu1104 1. Nov 2011 18:58

AW: Shellexecute Problem
 
Zitat:

Zitat von DeddyH (Beitrag 1133866)
Ich kenne das Programm jetzt nicht, aber wäre es nicht möglich, dass es die DLLs auch im eigenen Verzeichnis sucht statt im aktuellen Arbeitsverzeichnis? In dem Fall kannst Du nämlich übergeben, was Du willst, es wird nie klappen, solange Du das Programm von woanders startest.

hmm, hört sich logisch an. Naja dann werde ich es wohl mal anders versuchen :-)

Ich danke dir für deine schnelle hilfe!

Code:
Solche relativen Pfade, wie du ihn grade nutzt, also mit . und .. , verwendet man einfach nicht.
habe ich nicht, ich nutze JvComputerInfoEx.Folders.Temp :-)
Sollte also nur ein Beispiel sein.

Best Regards
Danu.

himitsu 1. Nov 2011 19:02

AW: Shellexecute Problem
 
Siehe mein Add.

Statische geladene DLLs kann nur Windows suchen und sonst gibt man selten einen Suchpfad mit an, wenn man MSDN-Library durchsuchenLoadLibrary verwendet.
PS: Dort steht auch irgendwo, wie und wo gesucht wird.



Kopiere die DLLs doch mit zum Programm rüber oder leg sie in eines der Suchverzeichnisse.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:15 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