-1

我如何设置TaskThread特权?

我问是因为我使用Task Scheduler Managed Wrapper,当我在另一个线程(显然具有较低权限)中调用它时,我得到了异常

我看到了这个 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
4

1 回答 1

3

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

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

您的问题中没有任何内容可以帮助我们帮助您缩小范围。任务计划程序出现问题是一个远程解释,丢失注册表项将是您机器的一个相当严重的问题。

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

于 2013-08-04T13:30:20.787 回答