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/)
-   -   Problem mit shellexecute und Pfad (https://www.delphipraxis.net/155599-problem-mit-shellexecute-und-pfad.html)

R2009 31. Okt 2010 06:32

Problem mit shellexecute und Pfad
 
Hi DP'ler,

ich muss eine Anwendung, aus meinem Programm heraus, starten. Das versuche ich mit shellexecute.
Problem: die zugehörigen ini Dateien usw befinden sich in dem Programmfolder.
Ich habe versucht den Pfad zu übergeben. Das funktioniert jedoch nicht. Das Programm wird nicht einmal gestartet.

Delphi-Quellcode:
var dbpath:string;i:integer;
begin
  caption:=get_language_item('GER','form_searcher','sg_header_1');
  bn1.caption:=get_language_item('GER','form_searcher','sg_header_1');
  dbpath:=extractfilepath(application.ExeName)+'LCRset2\');
  i:=ShellExecute(Application.Handle, 'open', 'LCRset2\LCRset2.exe',nil,pchar(dbpath), SW_SHOW);
starte ich das, wie unten, wird das Programm geöffnet aber er findet seine Ini Dateien nicht. Ist auch ganz klar, woher soll er wissen wo sie liegen.

Delphi-Quellcode:
  i:=ShellExecute(Application.Handle, 'open', 'LCRset2\LCRset2.exe',nil,nilSW_SHOW);


Kann mir jemand helfen?
Grüsse
rainer

Andreas L. 31. Okt 2010 07:24

AW: Problem mit shellexecute und Pfad
 
Delphi-Quellcode:
  dbpath := extractfilepath(application.ExeName);
  i := ShellExecute(Application.Handle, 'open', Pchar(dbpath + 'LCRset2\LCRset2.exe'), nil, nil, SW_SHOW);

himitsu 31. Okt 2010 07:44

AW: Problem mit shellexecute und Pfad
 
Was Andreas sagen will: Nutze möglchst absolute (vollständige) und keine relativen Pfadangaben.

oder
Delphi-Quellcode:
dbpath := extractfilepath(ParamStr(0));
(isses Selbe)

R2009 31. Okt 2010 08:26

AW: Problem mit shellexecute und Pfad
 
Hallo,
danke für eure Antworten. Das ist mir schon klar. Das ist aber auch nicht mein Problem.

Delphi-Quellcode:
  dbpath:=extractfilepath(application.ExeName);
  i:=ShellExecute(Application.Handle, 'open', Pchar(dbpath + 'LCRset2\LCRset2.exe'),nil,nil, SW_SHOW);

So läuft das, das Programm meckert nur dass es seine Ini Dateien nicht findet! Mein Problem ist, dass ich dem Programm den Pfad mitgeben muss in dem es seine Dateien findet.

Delphi-Quellcode:
  dbpath:=extractfilepath(application.ExeName);
  i:=ShellExecute(Application.Handle, 'open', Pchar(dbpath + 'LCRset2\LCRset2.exe'),nil,Pchar(dbpath + 'LCRset2', SW_SHOW);
In dieser Version läuft überhaupt nichts mehr.

Also mein Programm läuft unter:
...searcher\
das aufzurufende Programm liegt unter:
...searcher\LCRset2\LCRset2.exe

shellexecute muss das Programm LCRset2.exe im seinem Verzeichnis ausführen.


Grüsse
Rainer

Andreas L. 31. Okt 2010 08:44

AW: Problem mit shellexecute und Pfad
 
Welchen Wert gibt ShellExecute zurück? Die Angabe des WorkingDir (5ter Parameter) ist normalerweise nicht notwendig.

http://msdn.microsoft.com/de-de/libr...=VS.85%29.aspx (Siehe return value etwa in der Mitte der Seite).

R2009 31. Okt 2010 08:47

AW: Problem mit shellexecute und Pfad
 
Hi,
gibt 2 zurück. Kann ich aus der MSN Site leider nicht nachvollziehen.

Grüsse
Rainer

Andreas L. 31. Okt 2010 08:50

AW: Problem mit shellexecute und Pfad
 
Also bitte ein bisschen Eigeninitiative: ShellApi.pas öffnen und schauen welche Konstante den Wert 2 hat...

http://www.delphi-treff.de/tipps/son...-shellexecute/

2 = Datei nicht gefunden

haentschman 31. Okt 2010 08:54

AW: Problem mit shellexecute und Pfad
 
Moin...
Zitat:

So läuft das, das Programm meckert nur dass es seine Ini Dateien nicht findet!
...ist ein Programmierfehler des Programmes.

versuch mal:
Delphi-Quellcode:
dbpath:=extractfilepath(application.ExeName;
i:=ShellExecute(Application.Handle, 'open', Pchar(dbpath + 'LCRset2\LCRset2.exe'),nil,Pchar(dbpath + 'LCRset2'), SW_SHOW);
... da fehlte in der Pfadangabe eine Klammer.
Ansonsten als Notlösung vorher das CurrentDirectory auf den Pfad mit der LCRset2.exe setzen.

R2009 31. Okt 2010 09:01

AW: Problem mit shellexecute und Pfad
 
Hi,

das funktioniert mit shellexecute nicht!
Habe eine andere Lösung:

Delphi-Quellcode:
procedure ShellExecAndWait(dateiname: string; dir: string; Parameter: string);  // benötigt ShellAPI in Uses
var executeInfo: TShellExecuteInfo;
dw: DWORD;
begin
   FillChar(executeInfo, SizeOf(executeInfo), 0);
   with executeInfo do
      begin
         cbSize := SizeOf(executeInfo);
         fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
         Wnd := GetActiveWindow();
         executeInfo.lpVerb := 'open';
         executeInfo.lpParameters := PChar(Parameter);
         executeInfo.lpDirectory:= PChar(dir);
         lpFile := PChar(dateiname);
         nShow := SW_SHOWNORMAL;
      end;
      if ShellExecuteEx(@executeInfo) then dw := executeInfo.HProcess
         else
            begin
               ShowMessage('Fehler: ' + SysErrorMessage(GetLastError));
               exit;
            end;
      while WaitForSingleObject(executeInfo.hProcess, 50) <> WAIT_OBJECT_0 do
      Application.ProcessMessages;
      CloseHandle(dw);
end;

Aufgerufen mit:
  dbpath:=extractfilepath(application.ExeName)+'LCRset2\';
  ShellExecAndWait(dbpath + '\LCRset2.exe',dbpath,'');

so funktionierts nicht.
  i:=ShellExecute(Application.Handle, 'open', Pchar(dbpath + 'LCRset2.exe'),nil,pchar(dbpath), SW_SHOW);
Grüsse
Rainer

PS: würde mich aber schon interessieren warum das so ist!

R2009 31. Okt 2010 09:04

AW: Problem mit shellexecute und Pfad
 
Hi,
funktioiert doch. Hatte im Pfad einen Fehler.

Delphi-Quellcode:
  dbpath:=extractfilepath(application.ExeName)+'LCRset2\';
  i:=ShellExecute(Application.Handle, 'open', Pchar(dbpath + 'LCRset2.exe'),nil,pchar(dbpath), SW_SHOW);    //pchar(dbpath)
Grüsse
rainer


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