Files
Common/Helpers/ApplicationIsolation.cs
2014-04-30 16:57:42 -04:00

41 lines
1.4 KiB
C#

using System;
using System.Reflection;
using System.Security.AccessControl;
using System.Security.Principal;
using System.Threading;
namespace Common.Helpers
{
public static class ApplicationIsolation
{
public static IDisposable GetIsolationHandle()
{
string applicationName = Assembly.GetEntryAssembly().GetName().Name;
return GetIsolationHandle(applicationName);
}
public static IDisposable GetIsolationHandle(string applicationName)
{
// Create mutex security settings
MutexSecurity mutexSecurity = new MutexSecurity();
// Create a world security identifier
SecurityIdentifier securityIdentifier = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
// Create an access rule for the mutex
MutexAccessRule mutexAccessRule = new MutexAccessRule(securityIdentifier, MutexRights.FullControl, AccessControlType.Allow);
// Add the access rule to the mutex security settings
mutexSecurity.AddAccessRule(mutexAccessRule);
// Create the mutex and see if it was newly created
bool createdNew;
Mutex mutex = new Mutex(false, applicationName, out createdNew, mutexSecurity);
// Return the mutex if it is new
return createdNew ? mutex : null;
}
}
}