Hallo,
ich hab irgendwo den unten stehenden Code her, weiss leider nicht mehr von wo, um externe Prozesse zu starten. Das Ganze klappt auch soweit ganz wunderbar. Jedoch habe ich versucht mittels
mysql.exe eine Datenbank aus einem Dump zu erstellen.
Filename=c:\mysql\bin\mysql.exe -uroot -hlocalhost -pBLABLA meinedb < dump.sql
Gebe ich diesen Befehl direkt in einer Konsole ein, klappt das auch wunderbar. Über die RunProcess Methode jedoch nicht? RunProcess klappt, wie gesagt in allen anderen Fällen, die ich ausprobiert habe. Ich habe den Verdacht, es liegt an dem Zeichen
< im Befehl... Kann das sein, oder hat jemand ne Erklärung für das Phänomen.
Noch ne Bemerkung: ein neuer Prozess WIRD gestartet, jedoch wird der Befehl eben nicht korrekt ausgeführt.
Gruß,
Tom
Delphi-Quellcode:
function RunProcess(FileName: string; ShowCmd: DWORD; wait: Boolean; ProcID: PDWORD): Longword;
var
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
FillChar(StartupInfo, SizeOf(StartupInfo), #0);
StartupInfo.cb := SizeOf(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
StartupInfo.wShowWindow := ShowCmd;
if not CreateProcess(nil,
@Filename[1],
nil,
nil,
False,
CREATE_NEW_CONSOLE or
NORMAL_PRIORITY_CLASS,
nil,
nil,
StartupInfo,
ProcessInfo)
then
Result := WAIT_FAILED
else
begin
if wait = FALSE then
begin
if ProcID <> nil then ProcID^ := ProcessInfo.dwProcessId;
exit;
end;
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess, Result);
end;
if ProcessInfo.hProcess <> 0 then
CloseHandle(ProcessInfo.hProcess);
if ProcessInfo.hThread <> 0 then
CloseHandle(ProcessInfo.hThread);
end;