如何设置任务或线程权限?

时间:2013-08-04 08:21:08

标签: c# multithreading task-parallel-library

如何设置TaskThread权限?

我问,因为我使用Task Scheduler Managed WrapperI 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);

编辑2:

这些是例外情况:

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

1 个答案:

答案 0 :(得分:3)

此COM错误代码 nothing 与线程权限有关,链接的文章是非常错误的。接口在HKLM\Software\Classes\Interface注册表项中注册。当需要将调用从一个线程编组到另一个线程时,COM将查看那里,它需要知道将复制函数参数值的代理。这当然是您程序中非常可能出现的情况,我们唯一知道的是您启动一个帖子。

您的计算机上的注册表似乎有问题。或者COM服务器没有正确注册。或者COM服务器不支持从线程使用。或者您的程序在64位版本的Windows上是32位进程,并且Wow6432Node中不存在接口密钥。或者服务器注册不正确,仅在HKCU中写入密钥,而不是HKLM, 与用于运行代码的用户帐户有关。

您的问题中没有任何内容可以帮助我缩小范围。对任务调度程序有问题是一个长途解释,丢失注册表项对于您的计算机来说将是一个相当严重的问题。

通过运行SysInternals的ProcMon实用程序开始诊断此问题。您会看到您的程序在Interface中搜索密钥而未找到密钥。使用完整键名称更新您的问题以获得更多帮助。