多个Windows用户帐户上的一个实例应用程序

mka*_*shy 5 .net c# vb.net mutex user-accounts

我使用了Mutex的解决方案来禁止同时打开我的应用程序的多个实例

但是,当我使用的窗口切换用户,并打开另一个用户,并尝试打开应用程序,它通常打开,无法检测它在其他帐户下运行

我怎么能解决这样的问题,并禁止在登录Windows用户帐户中打开应用程序

我正在使用这样的代码

Dim onlyInstance As Boolean = False
_mutex = New Mutex(True, "Application Name", onlyInstance)
If Not onlyInstance Then
   MessageBox.Show("Application is already running.", "Error.")
   System.Diagnostics.Process.GetCurrentProcess.Kill()
   System.Diagnostics.Process.GetCurrentProcess.WaitForExit()
End If
Run Code Online (Sandbox Code Playgroud)

stu*_*rtd 4

如果您将互斥锁设置为全局,那么它将对所有用户可见:

mutexName = String.Format("Global\\{{{0}}}", "Application Name"); 
Run Code Online (Sandbox Code Playgroud)

文档中:

命名系统互斥体可以有两个级别的可见性。如果其名称以前缀“Global\”开头,则互斥体在所有终端服务器会话中都可见。如果其名称以前缀“Local\”开头,则互斥锁仅在创建它的终端服务器会话中可见。在这种情况下,服务器上的每个其他终端服务器会话中都可以存在具有相同名称的单独互斥锁。如果在创建命名互斥体时未指定前缀,则它将采用前缀“Local\”。在终端服务器会话中,名称仅前缀不同的两个互斥体是单独的互斥体,并且两者对终端服务器会话中的所有进程都是可见的。也就是说,前缀名称“Global\”和“Local\”描述了互斥体名称相对于终端服务器会话的范围,而不是相对于进程的范围。