![]() |
ShellExecAndWait nicht bei allen Windows XPs??
Liebe Leute,
ich verwende folgende Proc aus der CodeLib, um ein ext. Programm zu starten und auf sein Ende zu warten. Das funktioniert bei meinem Win7 und auf einem Win2003-Serversystem auch problemlos. Nur bei anderen WinXPs funktionieren offenbar weder Parameterübergabe noch das Warten. Ich habe schon gegoogelt, aber leider keinen Hinweis gefunden. Jemand eine Idee? Danke und schöne Grüße, frieder
Delphi-Quellcode:
procedure ShellExecAndWait(dateiname: string; Parameter: string);
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); 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; // Aufruf z.B.: ShellExecAndWait(extractfilepath(paramstr(0)) + '\tools\prog.exe', tempverz + '\config.ini'); |
AW: ShellExecAndWait nicht bei allen Windows XPs??
Welcher Fehlercode kommt?
Wie schauen die paramter dateiname und Parameter konkret aus? |
AW: ShellExecAndWait nicht bei allen Windows XPs??
Zitat:
Und die exemplarischen Parameter hier sind realistisch (exe + Übergabe von zu öffnender ini-Datei). Oder meinst Du etwas anderes? Gruß, frieder |
AW: ShellExecAndWait nicht bei allen Windows XPs??
Autsch, nein, ich weiß jetzt, woran es liegt, aber ich finde keine Lösung: Das Problem liegt bei Dateinamen/Pfaden mit Leerzeichen! Das folgende bringt jedoch keine Lösung:
Delphi-Quellcode:
procedure ShellExecAndWait(dateiname: string; Parameter: string);
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 + '"'); //<--- 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; Hat jemand eine Idee, wie ich das deichseln könnte? Danke und schöne Mittagesgrüße, frieder |
AW: ShellExecAndWait nicht bei allen Windows XPs??
Lass doch die Funktion, wie sie ist und füge die Anführungszeichen bei der Übergabe ein, wo es nötig ist.
|
AW: ShellExecAndWait nicht bei allen Windows XPs??
Zitat:
b) Warum funktioniert es überhaupt nicht, wenn ich die "" in die Funktion nehme?!? Danke und Gruß, frieder EDIT: Argh, :wall: hab in einer anderen Proc vergessen, zu aktualisieren... Obige Ergänzung funktioniert doch... Sorry für den Spam hier.. :oops: |
AW: ShellExecAndWait nicht bei allen Windows XPs??
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:40 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