public void UpdateSessionWatchers(object state) { int[] winSessions = WTSEngine.GetActiveSessions(); Process[] rcdProcesses = GetRcordingProcesses(); _watchers.Clear(); foreach (int wsid in winSessions) { var watcher = new SessionWatcher() { WinSessionId = wsid }; _watchers.Add(watcher); var proc = Array.Find(rcdProcesses, p => p.SessionId == wsid); if (proc != null) { watcher.RecordProcess = proc; watcher.State = SessionState.Recording; } else { string user = WTSEngine.GetDomainUserBySessionId(wsid); if (UserPolicy.IsUserRecording(user)) { // logon } else { watcher.State = SessionState.Exclude; } } } }
private void ScanWinSessionsToRecordOrEnd(object state) { int[] winSessions = WTSEngine.GetActiveSessions(); var rcdProcesses = GetRcordingProcesses(); // if not recording, record it. foreach (int sid in winSessions) { if (Array.Find(rcdProcesses, p => p.SessionId == sid) == null) { string user = WTSEngine.GetDomainUserBySessionId(sid); if (UserPolicy.IsUserRecording(user)) { TraceLogger.Instance.WriteLineInfo("Start recording by configuration. user: "******"Stop recording by configuration. user: "******"Kill recording agent because double process. sessionId: " + proc.SessionId); try { proc.Kill(); } catch (Exception) { } } else { sessions.Add(proc.SessionId); } } // dispose Array.ForEach(rcdProcesses, p => p.Dispose()); }