Delphi-PRAXiS
Seite 1 von 2  1 2      

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

kuba 24. Dez 2015 14:17

ShellExecute Laufwerk Problem
 
Hallo,

ich habe eine Anwendung geschrieben, die sich nur von einem bestimmten USB Stick starten lässt. Das Programm soll von einer anderen Anwendung, die sich auf Laufwerk C: befindet, gestartet werden.

Wenn ich das Programm per Mausklick vom USB-Stick starte funktioniert alles einwandfrei, wenn ich das Programm jedoch von meiner Anwendung auf Laufwerk C: starte funktioniert es nicht. Testweise habe ich das Programm von der Eingabeaufforderung gestartet. Wenn das Prompt auf Laufwerk C: ist funktioniert es nicht. Sobald ich auf das USB Laufwerk wechsle und das Programm starte funktioniert es.

Wie kann ich erreichen, daß meine Anwendung vom richtigen Laufwerk gestartet wird ?

Mein Programmaufruf sieht so aus:

Delphi-Quellcode:
ShellExecute(handle, 'open', PChar(USBDrive.Drive+':\'+'usb.exe'), nil, PChar(USBDrive.Drive+':\'), SW_NORMAL);


KUBA

Luckie 24. Dez 2015 14:33

AW: ShellExecute Laufwerk Problem
 
Und wie lautet die Fehlermeldung? Was gibt die Eigenschaft Drive zurück?

kuba 24. Dez 2015 14:53

AW: ShellExecute Laufwerk Problem
 
Zitat:

Zitat von Luckie (Beitrag 1325226)
Und wie lautet die Fehlermeldung? Was gibt die Eigenschaft Drive zurück?

Wie kann ich das herausfinden ? Ich sehe nur "Programm startet und tut was es soll" bzw. "Programm startet und tut nicht was es soll".

kuba

nahpets 24. Dez 2015 15:07

AW: ShellExecute Laufwerk Problem
 
Mir ist nicht ganz klar, was Du möchtest.

Soll das Arbeitsverzeichnis des Programmes das Laufwerk des USB-Sticks sein?

Dann eventuell im Programm (FormCreate oder so) dashier ausprobieren:
Delphi-Quellcode:
...
  ChDir(ExtractFilePath(Application.ExeName));
... oder
  ChDir(ExtractFileDrive(Application.ExeName));
...
Im ersten Fall ist dann das aktuelle Verzeichnis des Programmes das Verzeichnis, in welchem sich die Exe befindet.

Im zweiten Fall ist das aktuelle Verzeichnis das Root-Laufwerk des USB-Sticks, auf dem sich die Exe befindet.

mkinzler 24. Dez 2015 15:44

AW: ShellExecute Laufwerk Problem
 
Zitat:

Zitat von kuba (Beitrag 1325228)
Zitat:

Zitat von Luckie (Beitrag 1325226)
Und wie lautet die Fehlermeldung? Was gibt die Eigenschaft Drive zurück?

Wie kann ich das herausfinden ? Ich sehe nur "Programm startet und tut was es soll" bzw. "Programm startet und tut nicht was es soll".

kuba

Windowsfunktionen lefern einen Statuscode zurück, aus dem man den Erfolg oder Fehlergrund ablesen kann.

https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx

kuba 24. Dez 2015 15:47

AW: ShellExecute Laufwerk Problem
 
Zitat:

Zitat von nahpets (Beitrag 1325229)
Mir ist nicht ganz klar, was Du möchtest.

Soll das Arbeitsverzeichnis des Programmes das Laufwerk des USB-Sticks sein?

Dann eventuell im Programm (FormCreate oder so) dashier ausprobieren:
Delphi-Quellcode:
...
  ChDir(ExtractFilePath(Application.ExeName));
... oder
  ChDir(ExtractFileDrive(Application.ExeName));
...
Im ersten Fall ist dann das aktuelle Verzeichnis des Programmes das Verzeichnis, in welchem sich die Exe befindet.

Im zweiten Fall ist das aktuelle Verzeichnis das Root-Laufwerk des USB-Sticks, auf dem sich die Exe befindet.


Danke für den Tip, mit Nr. 2 funktioniert es :)
Beim ShellExecute muss das Arbeitsverzeichnis durch "nil" ersetzt werden:

Delphi-Quellcode:
ShellExecute(handle, 'open', PChar(USBDrive.Drive+':\'+'usb.exe'), nil, nil, SW_NORMAL);


OnCreate der zu startenden Anwendung:

Delphi-Quellcode:
ChDir(ExtractFileDrive(Application.ExeName));
Super !!

kuba

kuba 24. Dez 2015 15:49

AW: ShellExecute Laufwerk Problem
 
Zitat:

Zitat von mkinzler (Beitrag 1325232)
Zitat:

Zitat von kuba (Beitrag 1325228)
Zitat:

Zitat von Luckie (Beitrag 1325226)
Und wie lautet die Fehlermeldung? Was gibt die Eigenschaft Drive zurück?

Wie kann ich das herausfinden ? Ich sehe nur "Programm startet und tut was es soll" bzw. "Programm startet und tut nicht was es soll".

kuba

Windowsfunktionen lefern einen Statuscode zurück, aus dem man den Erfolg oder Fehlergrund ablesen kann.

https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx


Danke, ein Beispiel habe ich in der Delphi-Praxis gefunden. Kommt aber keine Fehlermeldung zurück, weil das Programm einwandfrei gestartet wird, nur eben vom verkehrten Laufwerk.

kuba

DeddyH 24. Dez 2015 16:47

AW: ShellExecute Laufwerk Problem
 
Das Problem deutet darauf hin, dass das zu startende Programm mit relativen Pfaden arbeitet und es deshalb auf das Arbeitsverzeichnis ankommt. Wenn Du auf absolute Pfade umstellst, würde sich die Problematik in dem Fall in Luft auflösen.

TBx 24. Dez 2015 21:55

AW: ShellExecute Laufwerk Problem
 
Zitat:

Zitat von DeddyH (Beitrag 1325235)
Wenn Du auf absolute Pfade umstellst, würde sich die Problematik in dem Fall in Luft auflösen.

Das wage ich zu bezweifeln, da das Programm ja auf einem USB-Stick liegt. Bei diesem ist keineswegs sichergestellt, dass er immer und überall den selben Laufwerksbuchstaben erhält.

kuba 24. Dez 2015 22:22

AW: ShellExecute Laufwerk Problem
 
Jedenfalls konnte ich mein Problem durch "ChDir(ExtractFileDrive(Application.ExeName)); " erfolgreich lösen.
Da wäre ich selbst nicht drauf gekommen.
Ohne Hilfe hätte ich noch tagelang gegrübelt und herumgetrixt, vielen Dank !!

kuba


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:51 Uhr.
Seite 1 von 2  1 2      

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