本文介绍了"找不到路径&QUOT的一部分;在创建互斥错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我被这个困惑,有人可以告诉我为什么,当我打电话:

I'm baffled by this, can someone tell me why, when I call:

using (Mutex mtx = new Mutex(false, strId))
{
}

我得到这个异​​常:

I get this exception:

找不到路径的一部分。

如果 strId 设置为类似本地主机\ SQLEX preSS-MYNAME-2

推荐答案

的:

在运行终端服务,一个名为系统互斥的服务器  可以有两个级别的可见性。如果它的名字开头的preFIX  全球\的互斥体在所有终端服务器会话可见。如果  它的名字开头的preFIX本地\,互斥体是可见的,只有在  在创建它的终端服务器会话。在这种情况下,一个  具有相同名称的单独的互斥可以在每个其它的存在  在服务器上的终端服务器会话。如果没有指定preFIX  当你创建一个命名的互斥体,它采取了preFIX本地\。在一个  终端服务器会话两个互斥的名字只相差他们  prefixes是分开的互斥体,无一不是对所有进程可见  在终端服务器会话。也就是说,preFIX名全球\  和本地\形容互斥体的名称相对于终端的范围  服务器会话,不相进程。

由于你是在你的名字用一个反斜杠( \ ),它假定您要指定可见性级别,然后发现本地主机不是一个有效的能见度的水平 - 因此产生的异常

Because you are using a backslash in your name (\) it assumes you are trying to specify a visibility level, and then discovers localhost isn't a valid visibility level - hence generating the exception.

这是相当奇怪的.NET文档不明确提及 \ 是互斥的名字保留字符,在Win32文档不解释好(link):

It's rather strange the .NET docs don't mention explicitly \ is a reserved character in Mutex names, the Win32 docs do explain it better (link):

的名称可以有一个全球\或本地\preFIX明确创建  全局或会话名称空间中的对象。的其余  名称可以包含除反斜杠字符的任意字符()。对于  更多信息,请参见内核对象命名空间。快速用户切换  使用终端服务会话来实现。内核对象名称必须  按照为终端服务的指导方针,使  应用程序可以支持多个用户。

这篇关于"找不到路径&QUOT的一部分;在创建互斥错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

06-30 10:17