如何设置Task
或Thread
权限?
我问,因为我使用Task Scheduler Managed Wrapper和I call it in another thread (that apparently has lower privileges) I get exception。
我看到了this SO question,但没有成功使用它(Thread.CurrentPrincipal.Identity as WindowsIdentity
为空)
这是我启动帖子的方式:
await Task.Factory.StartNew(() => {
/*...*/
}, cts.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default);
这些是例外情况:
COMException: Interface not registered (Exception from HRESULT: 0x80040155)
at Microsoft.Win32.TaskScheduler.V2Interop.IRegisteredTask.get_Definition()
at Microsoft.Win32.TaskScheduler.Task.get_Definition()
at TCM.TaskShedulerStartUp.Update() in c:\...\TaskShedulerStartUp.cs:line 61
答案 0 :(得分:3)
此COM错误代码 nothing 与线程权限有关,链接的文章是非常错误的。接口在HKLM\Software\Classes\Interface
注册表项中注册。当需要将调用从一个线程编组到另一个线程时,COM将查看那里,它需要知道将复制函数参数值的代理。这当然是您程序中非常可能出现的情况,我们唯一知道的是您做启动一个帖子。
您的计算机上的注册表似乎有问题。或者COM服务器没有正确注册。或者COM服务器不支持从线程使用。或者您的程序在64位版本的Windows上是32位进程,并且Wow6432Node中不存在接口密钥。或者服务器注册不正确,仅在HKCU中写入密钥,而不是HKLM, 与用于运行代码的用户帐户有关。
您的问题中没有任何内容可以帮助我缩小范围。对任务调度程序有问题是一个长途解释,丢失注册表项对于您的计算机来说将是一个相当严重的问题。
通过运行SysInternals的ProcMon实用程序开始诊断此问题。您会看到您的程序在Interface
中搜索密钥而未找到密钥。使用完整键名称更新您的问题以获得更多帮助。