Esempio n. 1
0
            public static EventWaitHandleAccessRule CurrentUserFullControlRule()
            {
                var currentUser = UserUtilities.CurrentUserName();

                return(new EventWaitHandleAccessRule(
                           currentUser,
                           EventWaitHandleRights.FullControl,
                           AccessControlType.Allow));
            }
Esempio n. 2
0
            public static EventWaitHandleAccessRule PublicSynchronizeAccessRule()
            {
                var currentUser = UserUtilities.CurrentUserName();

                return(new EventWaitHandleAccessRule(
                           new SecurityIdentifier(WellKnownSidType.WorldSid, null),
                           EventWaitHandleRights.Synchronize,
                           AccessControlType.Allow));
            }
        /// <summary>
        ///     Check if the service is running.
        /// </summary>
        public static bool EnsureRunning(Context context, string scenario, int waitMs)
        {
            var currentUser = UserUtilities.CurrentUserName();

#if !PLATFORM_OSX
            context.TraceMessage(Severity.Debug, $"Opening ready event name=[{scenario}] for user=[{currentUser}] waitMs={waitMs}.");
            var stopwatch = Stopwatch.StartNew();

            bool running = ensureRunningCore();

            if (running)
            {
                context.TraceMessage(Severity.Debug, $"Opened ready event name=[{scenario}] by {stopwatch.ElapsedMilliseconds}ms.");
            }

            return(running);

            bool ensureRunningCore()
            {
                try
                {
                    if (!IpcUtilities.TryOpenExistingReadyWaitHandle(scenario, out EventWaitHandle readyEvent, waitMs))
                    {
                        context.TraceMessage(Severity.Debug, "Ready event does not exist");
                        return(false);
                    }

                    using (readyEvent)
                    {
                        var waitMsRemaining = Math.Max(0, waitMs - (int)stopwatch.ElapsedMilliseconds);
                        if (!readyEvent.WaitOne(waitMsRemaining))
                        {
                            context.TraceMessage(Severity.Debug, "Ready event was opened but remained unset until timeout");
                            return(false);
                        }

                        return(true);
                    }
                }
                catch (UnauthorizedAccessException)
                {
                    context.TraceMessage(Severity.Debug, "Ready event exists, but user does not have acceptable security access");
                }

                return(false);
            }
#else
            context.TraceMessage(Severity.Debug, $"Not validating ready event (OSX) name=[{scenario}] for user=[{currentUser}] waitMs={waitMs}");
            return(true);
#endif
        }
        private static EventWaitHandle CreateShutdownEvent(ILogger logger, string scenario)
        {
            var currentUser = UserUtilities.CurrentUserName();

            logger.Debug($"Creating shutdown event name=[{scenario}] for user=[{currentUser}]");
            var shutdownEvent = IpcUtilities.GetShutdownWaitHandle(scenario);

            if (shutdownEvent.WaitOne(0))
            {
                shutdownEvent.Dispose();
                throw new CacheException($"Shutdown event name=[{scenario}] already exists");
            }

            return(shutdownEvent);
        }
        private static EventWaitHandle CreateReadyEvent(ILogger logger, string scenario)
        {
            var currentUser = UserUtilities.CurrentUserName();

            logger.Debug($"Creating ready event name=[{scenario}] for user=[{currentUser}]");
            var readyEvent = IpcUtilities.GetReadyWaitHandle(scenario);

            if (readyEvent.WaitOne(0))
            {
                readyEvent.Dispose();
                throw new CacheException("A service is already running");
            }

            return(readyEvent);
        }
        /// <summary>
        ///     Attempt to open event that will signal an imminent service shutdown or restart.
        /// </summary>
        public static EventWaitHandle OpenShutdownEvent(Context context, string scenario)
        {
            var currentUser = UserUtilities.CurrentUserName();

            context.TraceMessage(Severity.Debug, $"Opening shutdown event name=[{scenario}] for user=[{currentUser}]");

            EventWaitHandle handle = null;

            try
            {
                if (!IpcUtilities.TryOpenExistingShutdownWaitHandle(scenario, out handle))
                {
                    context.TraceMessage(Severity.Debug, "Shutdown event does not exist");
                }
            }
            catch (UnauthorizedAccessException)
            {
                context.TraceMessage(Severity.Debug, "Shutdown event exists, but user does not have acceptable security access");
            }

            return(handle);
        }