原文:同一个PC只能运行一个应用实例(考虑多个用户会话情况)
1 class Program
2 {
3 private static Mutex m;
4
5 [STAThread]
6 static void Main()
7 {
8 bool createNew = false;
9
10 /*
11 * 在运行终端服务的服务器上,已命名的系统 mutex 可以具有两级可见性。
12 * 如果名称以前缀“Global\”开头,则 mutex 在所有终端服务器会话中均为可见。
13 * 如果名称以前缀“Local\”开头,则 mutex 仅在创建它的终端服务器会话中可见。 在这种情况下,服务器上各个其他终端服务器会话中都可以拥有一个名称相同的独立 mutex。
14 * 如果创建已命名 mutex 时不指定前缀,则它将采用前缀“Local\”。
15 * 在终端服务器会话中,只是名称前缀不同的两个 mutex 是独立的 mutex,这两个 mutex 对于终端服务器会话中的所有进程均为可见。
16 * 即:前缀名称“Global\”和“Local\”说明 mutex 名称相对于终端服务器会话(而并非相对于进程)的范围。
17 */
18 string mutexName = String.Format("Global\\{0}", "IPP PCL");
19
20 try
21 {
22 m = new System.Threading.Mutex(true, mutexName, out createNew);
23 }
24 catch (UnauthorizedAccessException unauthorizedAccessex)
25 {
26 //命名的互斥体存在并具有访问控制安全性,但用户不具有 MutexRights.FullControl。
27 }
28
29 if (!createNew)
30 {
31 Console.WriteLine("Application is running");
32
33 return;
34 }
35
36 Console.WriteLine("Success");
37
38 Console.ReadKey();
39 }
40 }