Mit Folgender Routine starte ich einen Prozess unter einem anderen Benutzernamen:
Delphi-Quellcode:
function CreateProcessAsLogon(const User, PW, Application, CmdLine:
WideString):
LongWord;
var
si: TStartupInfoW;
pif: TProcessInformation;
s: WideString;
begin
ZeroMemory(@si, sizeof(si));
si.cb := sizeof(si);
si.dwFlags := STARTF_USESHOWWINDOW;
si.wShowWindow := 1;
SetLastError(0);
if CmdLine = '' then
s := Application
else
s := Application + ' "' + CmdLine + '"';
CreateProcessWithLogonW(PWideChar(User), nil, PWideChar(PW),
{LOGON_WITH_PROFILE} 0, nil, PWideChar(s), CREATE_DEFAULT_ERROR_MODE, nil,
nil, @si, @pif);
Result := GetLastError;
end;
Richtet euer Augenmerk mal auf den Parameter
dwLogonFlags. Doirt steht im Moment: {LOGON_WITH_PROFILE} 0. So starte ich den Explorer mit LOGON_WITH_PROFILE, wird er auch gestaret. Nur leider zeigt er dann folgendes Verhalten:
Explorer aktualisiert nicht mehr automatisch.
So jetzt habe ich herausgefunden, dass wenn ich ihn über die Eingabeaufvorderung so: runas /noprofile /user:Administrator explorer starte, obiges Verhaltenn icht zeigt und sofort aktualisiert, wie er soll. Ergo habe ich den Paramter entsprechen von LOGON_WITH_PROFILE nach 0 geändert. Nur jetzt startet er gar nicht mehr. Was Regedit aber tut.
Und jetzt die Preisfrage? Wie kann ich den Explorer mit CreateProcessWithLogonW starten ohne dass er das Profil läd, damit er eben auch ohne drücken von F5 aktualisiert?
[edit=Christian Seehase]URL-Tag korrgiert Mfg, Christian Seehase[/edit]