void Initialize() { try { NLog.LogManager.EnableLogging(); _sdkLogger = new NLogWrapper(); _log = new Logger(nameof(HideezService), _sdkLogger); _log.WriteLine($">>>>>> Starting service"); _log.WriteLine($"Service Version: {Assembly.GetEntryAssembly().GetName().Version}"); _log.WriteLine($"CLR Version: {Environment.Version}"); _log.WriteLine($"OS: {Environment.OSVersion}"); _log.WriteLine($"Command: {Environment.CommandLine}"); _log.WriteLine($">>>>> Starting messaging hub"); var pubSubLogger = new MetaPubSubLogger(_sdkLogger); _messenger = new MetaPubSub(pubSubLogger); _log.WriteLine(">>>>>> Get registry settings key"); clientRootRegistryKey = HideezClientRegistryRoot.GetRootRegistryKey(true); _log.WriteLine(">>>>>> Initialize session monitor"); _sessionInfoProvider = new SessionInfoProvider(_sdkLogger); _log.WriteLine(">>>>>> Initialize workstation id provider"); _workstationIdProvider = new WorkstationIdProvider(clientRootRegistryKey, _sdkLogger); if (string.IsNullOrWhiteSpace(_workstationIdProvider.GetWorkstationId())) { _workstationIdProvider.SaveWorkstationId(Guid.NewGuid().ToString()); } _log.WriteLine(">>>>>> Initilize audit"); var commonAppData = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData); string auditEventsDirectoryPath = $@"{commonAppData}\Hideez\Service\WorkstationEvents\"; _eventSaver = new EventSaver(_sessionInfoProvider, _workstationIdProvider, auditEventsDirectoryPath, _sdkLogger); _log.WriteLine(">>>>>> Initialize session timestamp monitor"); var sessionTimestampPath = $@"{commonAppData}\Hideez\Service\Timestamp\timestamp.dat"; _sessionTimestampLogger = new SessionTimestampLogger(sessionTimestampPath, _sessionInfoProvider, _eventSaver, _sdkLogger); OnServiceStarted(); _log.WriteLine(">>>>>> Initialize SDK"); InitializeSDK().Wait(); _messenger.StartServer("HideezServicePipe", () => { try { _log.WriteLine("Custom pipe config started"); var pipeSecurity = new PipeSecurity(); pipeSecurity.AddAccessRule(new PipeAccessRule( new SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, null), PipeAccessRights.FullControl, AccessControlType.Allow)); var pipe = new NamedPipeServerStream("HideezServicePipe", PipeDirection.InOut, 32, PipeTransmissionMode.Message, PipeOptions.Asynchronous, 4096, 4096, pipeSecurity); _log.WriteLine("Custom pipe config successful"); return(pipe); } catch (Exception ex) { _log.WriteLine("Custom pipe config failed.", ex); return(null); } }); _log.WriteLine(">>>>>> Service started"); } catch (Exception ex) { _log.WriteLine("Hideez Service has encountered an error during initialization." + Environment.NewLine + "The error must be resolved until service operation can be resumed. " + Environment.NewLine + "The service will not restart automatically.", ex, LogErrorSeverity.Fatal); // Exit code 0 prevents automatic service restart trigger on exit Environment.Exit(0); } }