![]() |
Angemeldeten Benutzer aus Dienst ermitteln - Windows 7
Hallo,
ich verwende zur Zeit folgenden Code der in ![]()
Delphi-Quellcode:
Das funktioniert einwandfrei mit Windows Vista, mit Windows 7 crascht die Routine jedoch.function GetLUserName : string; var Token : TJWSecurityToken; begin Token := TJwSecurityToken.CreateWTSQueryUserToken(); try try Result := Token.TokenOwner.AccountName['']; //AddToLog('Username requested: ' + Result); except on e : Exception do begin //AddToLog('@GetUsername' + #13#10 + e.Message); Result := ''; end; on e : EJWSCLProcessNotFound do begin //AddToLog('No user is loged on'); Result := ''; end; end; finally Token.Free; end; end; Kann mir jemand sagen woran das liegt ? Sind meine JEDI's zu alt ? KUBA |
Re: Angemeldeten Benutzer aus Dienst ermitteln - Windows 7
was heißt "crascht"?
|
Re: Angemeldeten Benutzer aus Dienst ermitteln - Windows 7
Der NT-Service steigt (bei Windows 7, und auch bei Windows 2000) direkt nach dem Start wieder aus, mit Systemfehler 1067.
Dass der Code unter Win2000 nicht funktioniert ist ja bekannt, aber dass er in Vista funktioniert und in Windows 7 nicht mehr ist doch seltsam,oder ? kuba |
Re: Angemeldeten Benutzer aus Dienst ermitteln - Windows 7
1067 = ERROR_PROCESS_ABORTED = The process terminated unexpectedly.
hmmm, sehr hilfreich Dann würde ich mal die Log-Funktionen nutzen und schauen was da nicht will. Wobei bei dieser Funktion eigentlich nicht viel passieren sollte, da die Exceptions ja abgefangen würden ... also würde ich vermuten, daß es an was anderem liegt. |
Re: Angemeldeten Benutzer aus Dienst ermitteln - Windows 7
sicher, Name des fehlerhaften Moduls: KERNELBASE.dll
anscheinend fehlt der Aufruf der Funktion in der DLL, oder sind meine Jedi's vielleicht doch zu alt ? Habe erst seit ca. 2 Monaten Vista drauf und Teste meinen Code jetzt auch mit der Windows 7 Testversion unter Virtual Box... Bin schon den halben Tag am googeln was Systemfehler 1067 bedeutet, jetzt weiss ich jedoch dass es an der GetUsername Routine liegt ... Also, ich hätt schon ne Idee wie es "ordentlich" funktionieren würde. Leider hab ich nicht so den Plan ... Vielleicht kann mir jemand erklären wie man folgenden Codeschnipsel ändern muss um eine Funktion statt ein Programm aufzurufen. Kann eigentlich nicht so schwierig sein, komme aber leider nicht selbst drauf ...
Delphi-Quellcode:
diese Funktion möchte ich gern mit o.g. Routine aufrufen:
try
CmdLine := Format('"%s%s" %s',[IncludeTrailingPathDelimiter(PW1),PW2,PW3]); FillChar(SI, SizeOf(SI), #0); FillChar(PI, SizeOf(PI), #0); SI.cb := SizeOf(SI); SI.lpDesktop := PChar('WinSta0\Default'); SI.dwFlags := STARTF_USESHOWWINDOW; SI.wShowWindow := SW_SHOWDEFAULT; ProcCreated := CreateProcessAsUser( hUserToken, nil, PChar(CmdLine), // pointer to command line string HIER MÖCHTE ICH GERN EINE FUNKTION AUFRUFEN !!! nil, // pointer to process security attributes nil, // pointer to thread security attributes True, // handle inheritance 0, // creation flags nil, // pointer to new environment block nil, // pointer to current directory name SI, // STARTUPINFO PI); // PROCESS_INFORMATION if ProcCreated then begin CloseHandle(PI.hProcess); CloseHandle(PI.hThread); end else ShowMessage('Error ' + SysErrorMessage(GetLastError)); finally CloseHandle(hUserToken); end;
Delphi-Quellcode:
Die crascht jedenfalls nicht, funktioniert aber nur wenn der angemeldete Benutzer diese ausführt ...
function GetUserName : string;
var Token : TJwSecurityToken; begin Token := TJwSecurityToken.CreateTokenEffective(TOKEN_READ); try Result := Token.TokenOwner.AccountName['']; finally Token.Free; end; end; kuba |
Re: Angemeldeten Benutzer aus Dienst ermitteln - Windows 7
Starte mal den Service in deinem Userkontext und nicht als Service,
dann solltest du fehlende Funktionsaufrufe erkennen können (die stehen dann in der Exception) |
Re: Angemeldeten Benutzer aus Dienst ermitteln - Windows 7
Zitat:
Ich verwende in meinem NT-Service übrigens den Code aus ![]() Habe festgestellt, dass es auch Probleme unter Vista gibt, wenn man z.B. den aktuellen User abmelden will. Das funktioniert ebenfalls nur wenn der "LOGOFF" im Userkontext ausgeführt wird. Daher wäre ich sehr dankbar, wenn mir jemand einen Tip geben könnte, wie man o.g. Code anpassen kann um auch z.B. ein "LOGOFF" im Userkontext auszuführen. Zur Zeit verwende ich ein "LOGOFF.EXE", das muss aber auch "schöner" gehen ... kuba |
Re: Angemeldeten Benutzer aus Dienst ermitteln - Windows 7
Unter Windows 7 hat sich am Terminal Service etwas geändert, was zu einem Problem führen kann.
Im ![]() Ich werde ein neues Package machen, sobald ich diese Version auf Win7 testen konnte. Im Moment fehlt mir aber die Zeit. Freiwillige? |
Re: Angemeldeten Benutzer aus Dienst ermitteln - Windows 7
Zitat:
ich hab mal ![]() Was muss ich runterladen und installieren um den Code zu testen ?? kuba |
Re: Angemeldeten Benutzer aus Dienst ermitteln - Windows 7
WAS bemängelt denn der Compiler?
Zitat:
Und eventuell nicht noch die JCL (aber den dort eingebundenen Units nach, könnte es sein, daß nur die JWSCL reicht) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz