CreateProcess ist erfolgreich, aber GetLastError () gibt den verweigerten Zugriff zurück

Ich habe ein wenig Verwirrung wegen widersprüchlicher Rückgabewerte vonCreateProcess() undGetLastError(). Wenn ich benutzeCreateProcess() In ähnlicher Weise wie im Folgenden ist es erfolgreich und scheint die erforderlichen Aufgaben zu erfüllen. Noch,GetLastError() Der Zugriff wird verweigert.

Wenn der Zugriff verweigert wird, warum scheint es, die Aufgabe abzuschließen. Im Gegensatz dazu, wennCreateProcess() gelingt, warum istGetLastError() Rückkehr verweigert?

Oder ist meine Verwendung vonGetLastError() falsch? Soll ich es nur benutzen, wennCreateProcess() Gibt einen fehlgeschlagenen Wert zurück? (Meine Rechtfertigung für das unten stehende Verhalten war, dass ich dachte, es sei besser, in Sicherheit zu sein als in Verlegenheit zu kommen.)

    SetLastError(0);
    hello = CreateProcess(_T("C:\\Windows\\System32\\cmd.exe"), 
        _T("C:\\Windows\\System32\\cmd.exe /C ant debug"),
        NULL,NULL,false,0,NULL,
        _T("C:\\My\\Directory"),&siStartupInfo, &piProcessInfo);
    FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_ALLOCATE_BUFFER 
        |FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(), 
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 
        (LPTSTR)&errorText, 0, NULL); 
    AfxMessageBox(errorText);

Ist diese Art von Verhalten normal? In demCreateProcess() Dokumentation, erwähnt es mitGetLastError() wannCreateProcess() schlägt fehl, erwähnt aber nicht die Umkehrung. Die Dokumentation nicht zu kritisieren, möchte nur eine Klarstellung.

Dies geschieht unabhängig davon, ob der zweite Parameter inCreateProcess() istNULL oder nicht. Vielleicht hat es damit zu tuncmd.exe Berechtigungen? Wenn das der Fall ist, sollte es nicht seinCreateProcess() Scheitern? Vielen Dank.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage