我正在尝试在Windows 7上使用C++编写一个Windows触发器任务。
我是this microsoft tutorial
但我在保存任务到根文件夹面临的问题.这里:
// ------------------------------------------------------
// Save the task in the root folder.
IRegisteredTask *pRegisteredTask = NULL;
hr = pRootFolder->RegisterTaskDefinition(
_bstr_t( wszTaskName ),
pTask,
TASK_CREATE_OR_UPDATE,
_variant_t(L"Builtin\\Administrators"),
_variant_t(),
TASK_LOGON_GROUP,
_variant_t(L""),
&pRegisteredTask);
字符串hr
出现错误的地方:* 没有在帐户名称和安全ID之间进行Map *
我也试过用_variant_t(L"S-1-5-32-544")
替换_variant_t(L"Builtin\\Administrators")
,以解决语言硬编码问题,仍然没有运气。
我怎么才能让它工作?
2条答案
按热度按时间6pp0gazn1#
Windows启动时创建任务队列任务的解决方案
(with管理员权限,适用于Windows 7,8等。请注意,这不会在Windows启动时显示UAC弹出窗口“您确定要使用管理员权限运行此软件吗?",这就是为什么任务验证方法在这种情况下比旧的HKEY_REQ_MACHINE...\CurrentVersion\Run解决方案更有趣)
在this tutorial中需要更新一些东西才能使其工作:
_variant_t(L"S-1-5-32-544")
而不是_variant_t(L"Builtin\\Administrators")
hr = pLogonTrigger->put_UserId(_bstr_t(L"DOMAIN\\UserName"));
,或者用一些Domain\Username detection code(我不能让它工作),或者只是注解这一行,它对我有用!TASK_RUNLEVEL_HIGHEST
添加一些代码然后你会得到著名的:
成功!任务注册成功!
呼!经过每天几个小时的编辑,现在是一个完整的
main.cpp
:字符串
pxq42qpu2#
我怀疑你的演示代码是XP时代的,还没有更新到符合Vista/Win7的规则。
我更新了示例以在设置登录触发器后设置LUA设置,它似乎可以工作:
字符串
如果您需要它在XP上运行,那么
get_Principal
调用很可能会失败,所以让这个失败通过。