Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.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# 等待/异步导致;“拒绝访问”;在远程WMI中_C#_.net_Asynchronous_Wmi - Fatal编程技术网

C# 等待/异步导致;“拒绝访问”;在远程WMI中

C# 等待/异步导致;“拒绝访问”;在远程WMI中,c#,.net,asynchronous,wmi,C#,.net,Asynchronous,Wmi,我在Win Server 2008 R2计算机上通过WMI检索服务列表,我有管理权限(并使用特定的管理员帐户访问)。我认为安全性还可以,因为我可以在.net和wbemtest中提取数据 当我使用完全相同的代码并使用wait和async访问数据时,问题就出现了。在这一点上,当我使用foreach遍历返回的对象时,我得到了一个“拒绝访问”的消息 我想强调的是,它返回的ManagementObjectCollection很好。如果我不使用wait,它也可以正常工作。工作和不工作之间的唯一区别是方法上的

我在Win Server 2008 R2计算机上通过WMI检索服务列表,我有管理权限(并使用特定的管理员帐户访问)。我认为安全性还可以,因为我可以在.net和wbemtest中提取数据

当我使用完全相同的代码并使用wait和async访问数据时,问题就出现了。在这一点上,当我使用foreach遍历返回的对象时,我得到了一个“拒绝访问”的消息

我想强调的是,它返回的ManagementObjectCollection很好。如果我不使用wait,它也可以正常工作。工作和不工作之间的唯一区别是方法上的async关键字和添加的wait代码,如下所示:

ManagementObjectCollection queryCollection = await Task.Run(() => Operations.ConnectService(wmipath, username, password));

ConnectService是一个静态方法,实际上可以很好地获取集合。我遇到的问题是:当我从阻塞变为线程时,为什么会出现“访问被拒绝”的情况?我遗漏了什么?

代码片段与上下文无关,因此很难判断发生了什么。但是,我怀疑这与线程上的当前标识有关。请尝试在执行查询“Operations.ConnectService(…)”的代码中的System.Security.Principal.WindowsIdentity.GetCurrent()调试器和在“await”之后运行的代码中查找差异。谢谢,我将开始朝这个方向探索。如果您发现您的代码在不同的用户下运行,您可能需要这样做:
var ctx=System.Security.SecurityContext.Capture();System.Security.SecurityContext.Run(ctx,()=>{…},null)