我正在尝试使用 .Net 4.0/4.5 在具有低完整性级别的 Windows 8 x64 桌面应用程序中创建/打开命名信号量。
相同的代码在 Windows 7 x64 上有效,但在 Windows 8 Entreprise x64 上失败,并出现 System.IO.IOException:“客户端不持有所需的权限”。
代码如下(控制台应用程序):
class Program
{
static void Main(string[] args)
{
System.Security.AccessControl.SemaphoreSecurity sec = null;
//[low integrity level[
sec = new System.Security.AccessControl.SemaphoreSecurity();
sec.SetSecurityDescriptorSddlForm("S:(ML;;NW;;;LW)");
//]low integrity level]
try
{
bool createdNew;
var sem = new System.Threading.Semaphore(0, int.MaxValue, "MySemaphoreName", out createdNew, sec);
if (createdNew) { Console.WriteLine("Semaphore created"); }
else { Console.WriteLine("Semaphore opened"); }
}
catch (Exception ex)
{
Console.WriteLine("Exception occured {0}", ex);
}
ConsoleKeyInfo cki = Console.ReadKey();
}
}
删除以下块时,它适用于两个系统:
sec = new System.Security.AccessControl.SemaphoreSecurity();
sec.SetSecurityDescriptorSddlForm("S:(ML;;NW;;;LW)");
欢迎任何帮助。