gpt4 book ai didi

c++ - C++ 中的任务管理器 : HRESULT of E_ACCESSDENIED on task registration

转载 作者:太空宇宙 更新时间:2023-11-04 12:46:01 24 4
gpt4 key购买 nike

这可能是一个常见问题,但我无法在网上找到它。我正在尝试在 Windows 10 上自动管理和创建计划任务。

我正在关注 timed trigger example来自微软文档。

我能够成功填充ITaskDefinition*IRegistrationInfo*IPrincipal*ITaskSettings*ITriggerCollection*IActionCollection* 根据该指南(全部获得 S_OK),我能够列出任务并删除现有任务。我还可以从 GUI 手动注册任务。

但是,当调用 RegisterTaskDefinition() 时,HRESULT 变为 E_ACCESSDENIED,没有进一步的细节。

这是我配置登录的地方:

void SetPasswordLogin(SchedulerServiceHandle srv, TaskHandle tsk){
HRESULT auth_s = tsk->principal->put_LogonType(TASK_LOGON_PASSWORD);
if(FAILED(auth_s)) {
throw TaskException("Failed to set logon type (password)");
}
/*HRESULT user_s = tsk->principal->put_UserId(_wstring2bstring(_domainuser2fqdnuser(srv->auth.domain,srv->auth.user)));
if(FAILED(user_s)) {
throw TaskException("Failed to set user");
}*/
HRESULT runl_s = tsk->principal->put_RunLevel(TASK_RUNLEVEL_HIGHEST);
if(FAILED(runl_s)) {
throw TaskException("Failed to set runlevel");
}
tsk->login_type = Task::LoginType::Password;
}

我对 RegisterTaskDefinition() 的调用:

void RegisterTestTask(SchedulerServiceHandle srv,TaskHandle tsk,ITaskFolder* folder,std::wstring name) {
IRegisteredTask* wintask = nullptr;
HRESULT wintask_s = folder->RegisterTaskDefinition(
NULL,//_bstr_t(&name),
tsk->definition,
//TASK_VALIDATE_ONLY,
TASK_CREATE|TASK_UPDATE,
_wstring2variant(_domainuser2fqdnuser(srv->auth.domain,srv->auth.user)),
_wstring2variant(srv->auth.pass),
TASK_LOGON_PASSWORD,
_variant_t(L""),
&wintask
);
/*snip - error checking*/
}

如果我使用 TASK_VALIDATE_ONLY 运行,它会正常运行。

我曾尝试以管理员身份运行 Visual Studio,发现它可能没有权限,但这没有任何改变 - 与直接从提升的 cmd 提示符运行二进制文件相同。

尽管 Principal 和 Registration 使用了相同的设置和凭据,但我有一个旧的 C# 版本确实有效,所以我一定缺少一些额外的步骤。

最佳答案

我想通了。

事实证明,除了:

#pragma comment(lib, "taskschd.lib")

Task scheduler 还需要链接到 comsupp 和 credui:

#pragma comment(lib, "comsupp.lib")
#pragma comment(lib, "credui.lib")

缺少链接库如何导致 E_ACCESSDENIED 中的结果令我感到困惑,但我想一旦我对 Windows API 有了更多了解,我就会弄明白这一点。

关于c++ - C++ 中的任务管理器 : HRESULT of E_ACCESSDENIED on task registration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51547861/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com