Zitat von
Dezipaitor:
Zitat von
xZise:
So... Dienst installiert, gestartet und getestet mit folgenden Code:
Delphi-Quellcode:
function GetUserName : string;
var
sl : TStringList;
Token : TJwSecurityToken;
begin
Token := TJwSecurityToken.CreateTokenEffective(TOKEN_READ);
try
Result := Token.TokenOwner.AccountName[''];
finally
Token.Free;
end;
end;
Ergebnis: Administratoren
Auch wenn keine Admins/niemand angemeldet sind.
Habe ich die falsche Variable genommen?
Total richtig. Wenn du den Source aus einem Dienst aufrufst, der unter SYSTEM läuft, dann ist das immer so.
Du musst das Token des angemeldeten Benutzers verwenden. CreateTokenEffective versucht zuerst das Token des aktuellen Threads
zu holen, und wenn das (meist) fehlschlägt, dann des Prozesses.
Dazu gibt es den Konstruktor TJwSecurityToken.CreateWTSQueryUserToken
Also damit wird es jedenfalls nicht gehen, da es auf Windows 2000 laufen muss.
Ich habe übrigens die Hilfe-Datei durchforstet, und alle Ergebnisse auf "logged, on, user" hängen mit den aktuellen Thread/Process zusammen... Außer WTSQueryUserToken, welches ja nicht unter
W2k geht
MfG
xZise