Hallo,
ich möchte aus meinem Programm (BDS2006 unter WXP compiliert) Diskpart.exe starten.
Unter WXP und
W2K geht es ohne Probleme, aber unter W2K3 Server 64bit lässt es sich nicht starten.
Zum Test ein Start von notepad.exe geht auch unter W2K3 64bit problemlos.
Der Punkt CreateProcess schlägt fehl, irgendeine Idee woran es liegen könnte ?
Delphi-Quellcode:
const
exe_Ok = 0; // Programm Start und Ende OK
exe_Fehler = 1; // Fehler beim Programmstart
exe_TimeOut = 2; // Zeitüberschreitung bei der Ausführung
exe_TermOk = 3; // Nach Zeitüberschreitung konnte es beendet werden
exe_TermErr = 4; // Nach Zeitüberschreitung konnte es nicht beendet werden
function exe_wait(prog, para : string;
timeout : integer;
terminate : boolean) : integer;
var prg, param, verz, ext : string;
startupinfo : tStartupInfo;
ProcessInfo : TProcessInformation;
ExitCode : integer;
begin
ExitCode := 0;
prg := trim(prog);
ext := trim(Ansilowercase(extractFileExt(prg)));
param := getEnvStr(Para) + chr(0);
verz := ExtractFilePath(prg);
prg := prg + ' ' + param;
fillchar(startupInfo, sizeof(tStartupInfo), 0);
startupInfo.cb := sizeof(tStartupInfo);
if createProcess(nil,
pchar(prg),
nil,
nil,
false,
NORMAL_PRIORITY_CLASS,
nil,
pchar(verz),
startupInfo,
processInfo)
then begin
if waitForSingleObject(processInfo.hProcess,timeout*1000) = Wait_TimeOut
then begin
if terminate then begin
if terminateProcess(processInfo.hProcess,exitCode)
then result := exe_TermOK
else result := exe_TermErr;
end
else result := exe_TimeOut;
end
else result := exe_ok;
closeHandle(processInfo.hProcess);
end
else result := exe_Fehler; // <-- Dieser Fehler kommt zurück
Application.ProcessMessages;
end;
Erfahrung ist etwas, daß man erst bekommt, kurz nachdem man es dringend gebraucht hätte.