public static EventWaitHandleAccessRule CurrentUserFullControlRule() { var currentUser = UserUtilities.CurrentUserName(); return(new EventWaitHandleAccessRule( currentUser, EventWaitHandleRights.FullControl, AccessControlType.Allow)); }
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); }