SevenSoftware.Windows.InstanceAwareApplication.InitializeSynchronizationObjects C# (CSharp) Method

InitializeSynchronizationObjects() private method

Initializes the synchronization objects needed to deal with multiple instances of the same application.
private InitializeSynchronizationObjects ( string baseName, IdentityReference identity ) : void
baseName string The base name of the synchronization objects.
identity System.Security.Principal.IdentityReference The identity to be associated to the synchronization objects.
return void
        void InitializeSynchronizationObjects(string baseName, IdentityReference identity)
        {
            string firstInstanceMutexName = baseName + "_FirstInstance";
            string serviceInitializationMutexName = baseName + "_ServiceInitialization";
            string serviceReadySemaphoreName = baseName + "_ServiceReady";
            string signaledToFirstInstanceSemaphoreName = baseName + "_SignaledToFirstInstance";

            bool isNew;
            var eventRule = new EventWaitHandleAccessRule(
                identity, EventWaitHandleRights.FullControl, AccessControlType.Allow);
            var eventSecurity = new EventWaitHandleSecurity();
            eventSecurity.AddAccessRule(eventRule);

            var mutexRule = new MutexAccessRule(identity, MutexRights.FullControl, AccessControlType.Allow);
            var mutexSecurity = new MutexSecurity();
            mutexSecurity.AddAccessRule(mutexRule);

            firstInstanceMutex = new Mutex(false, firstInstanceMutexName, out isNew, mutexSecurity);
            serviceInitializationMutex = new Mutex(false, serviceInitializationMutexName, out isNew, mutexSecurity);
            serviceReadySemaphore = new EventWaitHandle(
                false, EventResetMode.ManualReset, serviceReadySemaphoreName, out isNew, eventSecurity);
            signaledToFirstInstanceSemaphore = new EventWaitHandle(
                false, EventResetMode.AutoReset, signaledToFirstInstanceSemaphoreName, out isNew, eventSecurity);
        }