为了让我的应用程序以用户login的pipe理权限启动,我在任务调度程序中使用了一个任务。 它工作正常。 大多。 现在我收到错误报告,说这失败了:
rootFolder->RegisterTaskDefinition( _bstr_t(name.toWideCharPointer()), task, TASK_CREATE_OR_UPDATE, _variant_t(L"Builtin\\Administrators"), _variant_t(), TASK_LOGON_GROUP, _variant_t(L""), ®isteredTask) -> 0x80070534
0x80070534似乎意味着“帐户名称和安全ID之间没有映射已完成”。 我遵循(非常逐字)在以下示例: http : //msdn.microsoft.com/en-us/library/aa381911 (v=VS.85) .aspx
想法出了什么问题,以及如何解决? 应用程序有清单设置,所以用户需要是pipe理员来运行它。
问题:“Builtin \\ Administrators”组是语言相关的,不是吗? 我认为有问题的用户可能有一个非英语的Windows 7.如果是这样,我想它会更好地指定“S-1-5-32-544”而不是( http://support.microsoft.com/kb / 243330 )
更新:所以显式调用如下所示:
rootFolder->RegisterTaskDefinition( _bstr_t(name.toWideCharPointer()), task, TASK_CREATE_OR_UPDATE, _variant_t(L"S-1-5-32-544"), // Language independent "BUILTIN\Administrators" _variant_t(), TASK_LOGON_GROUP, _variant_t(L""), ®isteredTask)
确保应用程序使用提升的权限执行,否则该调用将失败。
花了一些时间之后,我发现需要进行更多的修改,而不仅仅是_variant_t(L"S-1-5-32-544")
才能使这个“登录触发器示例(C ++)”示例工作。
所有的细节都可以在这个答案中找到。
问题确实在于参数_variant_t(L"Builtin\\Administrators")
,它是硬编码到英文版的Windows。 通过使用语言不可知的安全标识符“S-1-5-32-544”( http://support.microsoft.com/kb/243330 ),问题已得到解决。
更新:所以显式调用如下所示:
rootFolder->RegisterTaskDefinition( _bstr_t(name.toWideCharPointer()), task, TASK_CREATE_OR_UPDATE, _variant_t(L"S-1-5-32-544"), // Language independent "BUILTIN\Administrators" _variant_t(), TASK_LOGON_GROUP, _variant_t(L""), ®isteredTask)
确保应用程序使用提升的权限执行,否则调用将失败。