Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;找不到路径的一部分“;创建互斥时出错_C#_.net_Windows_Mutex - Fatal编程技术网

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`前缀,所以我认为只要我不使用这些前缀,我就可以了。嗯,显然不是。。。