Ich habe hier ein dummes Problem. Erstmal der Code:
Delphi-Quellcode:
if not CreateProcessAsLogon(User, PW, Filename, Params)then
begin
MessageBox(hDlg, PChar(SysErrorMessage(GetLastError)), APPNAME, MB_ICONSTOP);
// ExitCode: ID_CANCEL -> don't close main window
ExitCode := ID_CANCEL;
end
else
// ExitCode: ID_OK -> close main window
ExitCode := ID_OK;
end
CreateProcessAsLogon sieht so aus:
Delphi-Quellcode:
function CreateProcessAsLogon(const User, PW, Application, CmdLine: WideString):
LongBool;
var
si : TStartupInfoW;
pif : TProcessInformation;
begin
ZeroMemory(@si, sizeof(TStartupInfo));
si.cb := SizeOf(TStartupInfoW);
si.dwFlags := STARTF_USESHOWWINDOW;
si.wShowWindow := 1;
Result := CreateProcessWithLogonW(PWideChar(User), nil, PWideChar(PW),
LOGON_WITH_PROFILE, nil, PWideChar(Application + ' ' + CmdLine),
CREATE_DEFAULT_ERROR_MODE, nil, nil, si, pif);
end;
Nun das Problem: Übergebe ich ein falsches Passwort, gibt die Funktion auch brav false zurück. Entsprechend geht der Code in den False-Zweig und die Messagebox erscheint. Schön, wenn da in der Messagebox nicht stünde, dass der Vorgang erfolgreich beendet wurde, was ja nun nicht stimmt.
Weiß jemand, was da falsch läuft? Also warum GetLastError 0 ist?