Einzelnen Beitrag anzeigen

Benutzerbild von cramer
cramer

Registriert seit: 23. Jun 2004
Ort: Velbert (NRW)
96 Beiträge
 
Delphi 2006 Enterprise
 
#1

Problem diskpart unter Server w2k3 64bit starten

  Alt 8. Sep 2008, 18:11
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.
  Mit Zitat antworten Zitat