![]() |
Re: Eigener Dienst -> Speicherauslastung wächst und wächs
habs jetzt mal so...
Delphi-Quellcode:
:dancer2: --> Ohne wachsende Speicherauslastung
function TSisterWatch.GetSession: string;
begin try Token := TJwSecurityToken.CreateWTSQueryUserToken(WtsGetActiveConsoleSessionID); // Token := TJwSecurityToken.CreateCompatibilityQueryUserToken(MAXIMUM_ALLOWED, 'explorer.exe'); Token.ImpersonateLoggedOnUser; //do stuff on user’s behalf Result := Token.GetTokenUserName; except Result := ''; end; Token.RevertToSelf; Token.Free; end; scheint aber "nur" als dienst (systemkonto) zu funktionieren!!! -> Habs zuerst als normales Programm getestet... ist das normal? muss jetzt leider gleich weg... versuche morgen noch mit der Ex Version.... bei der Ex Version muss man noch nen Terminalserver angeben als Parameter, geht das also auch Remote? nehm ich an... |
Re: Eigener Dienst -> Speicherauslastung wächst und wächs
1. ha das benötigt einen Dienst!
2. ImpersonateLoggedonuser ist hier nicht mehr nötig! |
Re: Eigener Dienst -> Speicherauslastung wächst und wächs
Hallo,
Delphi-Quellcode:
das sieht nicht gut aus !
function GetCurrUserName: string;
var Size : DWORD; begin Size := MAX_COMPUTERNAME_LENGTH + 1; SetLength(Result, Size); if GetUserName(PChar(Result), Size) then SetLength(Result, Size) else Result := ''; end;
Delphi-Quellcode:
function GetCurrUserName: string;
var Size : DWORD; sUserName : String; begin Result:= ''; Size := MAX_COMPUTERNAME_LENGTH + 1; SetLength(sUserName, Size); if GetUserName(PChar(sUserName), Size) then Result:= sUserName; end; Heiko |
Re: Eigener Dienst -> Speicherauslastung wächst und wächs
also ich krieg das mit Ex nicht hin... Ich weiss nicht welche Parameter?!
![]()
Delphi-Quellcode:
Token := TJwSecurityToken.CreateWTSQueryUserTokenEx(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION);
Delphi-Quellcode:
geht aber beides nicht... ich denke es liegt am ersten Parameter Server:TObject
Token := TJwSecurityToken.CreateWTSQueryUserTokenEx(WTS_CURRENT_SERVER_HANDLE, WtsGetActiveConsoleSessionID);
Zitat:
[Pascal Fehler] main.pas(371): E2250 Es gibt keine überladene Version von 'CreateWTSQueryUserTokenEx', die man mit diesen Argumenten aufrufen kann |
Re: Eigener Dienst -> Speicherauslastung wächst und wächs
Uh ja das ist mein Fehler. Im parallelen branch hab ich die Doku dazu schon angepasst. Nimm als erster parameter nil. Normal kommt da sonst TJwTerminalServer Objekt rein. Ich hab auch den Blog angepasst.
|
Re: Eigener Dienst -> Speicherauslastung wächst und wächs
The leak seems to be in WTSAPI32.DLL and specifically in the function WTSQuerySessionInformation with information classes WTSInitialProgram and WTSApplicationName.
You can test by looking up this part of JwsclTerminalServer:
Delphi-Quellcode:
and comment out these lines:
constructor TJwWTSSession.Create(const Owner: TJwWTSSessionList;
const SessionId: TJwSessionId; const WinStationName: TJwString; const ConnectState: TWtsConnectStateClass);
Delphi-Quellcode:
Windows Vista and XP seem to suffer, 2003 server seems to be ok.
FApplicationName := GetSessionInfoStr(WTSApplicationName);
FInitialProgram := GetSessionInfoStr(WTSInitialProgram); |
Re: Eigener Dienst -> Speicherauslastung wächst und wächs
ich habs jetzt mal so gemacht...
Delphi-Quellcode:
1'000'000'000 Dank euch allen! Scheint prima zu funktionieren.
function TSisterWatch.GetSession: string;
begin try Token := TJwSecurityToken.CreateWTSQueryUserTokenEx(nil{or a TJwTerminalServer object}, WtsGetActiveConsoleSessionID); // Token.ImpersonateLoggedOnUser; <- Its not necessary //do stuff on user’s behalf Result := Token.GetTokenUserName; except Result := ''; end; Token.RevertToSelf; Token.Free; end; |
Re: Eigener Dienst -> Speicherauslastung wächst und wächs
hehe... hab grad folgendes festgestellt...
(Ich überprüfe ja jede Sekunde einmal, ob der Benutzer gewechselt hat. mir der Funktion GeSession von oben...) Wenn ich jetzt den Dienst auf einem Rechner laufen habe funktioniert das super. Melde ich mich jetzt aber remote an diesem Rechner an (RDP), wirft die die Funktion GetSession folgende Fehlermeldung : Zitat:
wie würdet ihr das behandeln? -> ich meine ich will ja herausfinden wann sich ein anderer Benutzer angemeldet hat und solange ich eine RDP session habe, ists je eh immer der gleiche Benutzer. Also nicht weiter tragisch, oder wie seht ihr das? |
Re: Eigener Dienst -> Speicherauslastung wächst und wächs
Only the system account is allowed to retreive the token (since it is the user's primary access token). So my question is are you retreiving the token as system or as user/administrator?
PS: see my post above, maybe you can revert to the original code? |
Re: Eigener Dienst -> Speicherauslastung wächst und wächs
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:51 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 by Thomas Breitkreuz