C# &引用;找不到路径的一部分“;创建互斥时出错
我对此感到困惑,有人能告诉我为什么,当我打电话时:C# &引用;找不到路径的一部分“;创建互斥时出错,c#,.net,windows,mutex,C#,.net,Windows,Mutex,我对此感到困惑,有人能告诉我为什么,当我打电话时: using (Mutex mtx = new Mutex(false, strId)) { } 我得到一个例外: 找不到路径的一部分 如果strId设置为类似localhost\SQLEXPRESS-MyName-2?: 在运行终端服务的服务器上,指定的系统互斥体 可以有两个级别的可见性。如果其名称以前缀开头 “全局\”,互斥体在所有终端服务器会话中都可见。如果 其名称以前缀“Local\”开头,互斥体仅在 创建它的终端服务器会话。在这种情况
using (Mutex mtx = new Mutex(false, strId))
{
}
我得到一个例外:
找不到路径的一部分
如果strId
设置为类似localhost\SQLEXPRESS-MyName-2
?:
在运行终端服务的服务器上,指定的系统互斥体
可以有两个级别的可见性。如果其名称以前缀开头
“全局\”,互斥体在所有终端服务器会话中都可见。如果
其名称以前缀“Local\”开头,互斥体仅在
创建它的终端服务器会话。在这种情况下,一个
彼此之间可以存在具有相同名称的独立互斥体
服务器上的终端服务器会话。如果不指定前缀
创建命名互斥体时,它使用前缀“Local\”。在一段时间内
终端服务器会话,两个互斥体,其名称仅因其名称不同而不同
前缀是独立的互斥体,并且对所有进程都可见
在终端服务器会话中。也就是说,前缀名为“Global\”
和“Local\”描述互斥体名称相对于终端的范围
服务器会话,与进程无关
由于您在名称中使用了反斜杠(\
),因此它假定您正在尝试指定可见性级别,然后发现localhost
不是有效的可见性级别-因此生成异常
很奇怪,.NET文档没有明确提到\
是互斥体名称中的保留字符,Win32文档对其进行了更好的解释():
名称可以有“全局”或“本地”前缀来显式创建
全局或会话命名空间中的对象剩余的
名称可以包含除反斜杠字符()以外的任何字符。。对于
有关详细信息,请参阅。快速用户切换非常重要
使用终端服务会话实现。内核对象名称必须是
遵循终端服务概述的指南,以便
应用程序可以支持多个用户
@帕库戈麦斯:嗯,我不知道为什么当我打开互斥锁时会引发
DirectoryNotFoundException
?那里没有连接…如果您读到他的错误,则其:找不到路径“”的一部分。这个问题的答案也是你的答案。好的,我明白你的意思。虽然,同样奇怪的是,出现了目录异常。。。但是,哦,好吧,我想我将不得不更换斜杠…至于为什么它会被提升,我认为@Niels在回答这个问题上做得很好<代码>因为您的名字(\)中使用了反斜杠,所以它假定您正在尝试指定可见性级别,然后发现localhost不是有效的可见性级别-因此生成了异常。祝您好运:)我将此命名为重新打开,因为另一个主题中的答案是…'至少可以说是不完整的,说得更多是不正确的。谢谢。这也是我提到的:但是没有明确提到斜杠。他们只讨论了Global`、
Local`和'Session`前缀,所以我认为只要我不使用这些前缀,我就可以了。嗯,显然不是。。。