【问题标题】:C++ Win32 Schedule Task Fails because of bad XML由于 XML 错误,C++ Win32 计划任务失败
【发布时间】:2011-06-18 05:30:51
【问题描述】:

我正在摆弄 Windows 任务计划程序并尝试在我登录时安排要执行的任务。

所以我从 MSDN 复制并粘贴了有关如何执行此操作的确切示例代码 - http://msdn.microsoft.com/en-us/library/aa381911(v=VS.85).aspx - 我在代码示例中指定了我的用户名和密码。当我运行它时,我收到错误“无法保存任务:80041318”

感谢我提出另一个问题的人,我现在知道这个错误意味着:

任务 XML 包含格式错误或超出范围的值

现在我不知道这意味着什么,我在我的代码中做错了什么,尤其是当 99% 是示例 MSDN 代码的直接副本时?

也许我需要正确格式化我的用户名和密码,因为它们是 BSTR 或 VARIANT 的?

我只会发布我对代码所做的更改,但要查看整个代码,请转到http://msdn.microsoft.com/en-us/library/aa381911(v=VS.85).aspx

hr = pLogonTrigger->put_UserId( _bstr_t( L"soribo" ) );  // soribo is my username
pLogonTrigger->Release();                                // line 221

hr = pRootFolder->RegisterTaskDefinition(  // line 289
        _bstr_t( wszTaskName ),
        pTask,
        TASK_CREATE_OR_UPDATE, 
        _variant_t(L"soribo"), // put in my windows username again (I'm the admin)
        _variant_t(L"XXXXXX"), // put in my user password & no its not really XXXXXX :P 
        TASK_LOGON_GROUP,
        _variant_t(L""),
        &pRegisteredTask);

我不明白 XML 的来源,因为这是 C++ Win32 代码?

编辑:显示 pTask 相关代码:注意我没有更改任何内容,因此它是来自 MSDN 的示例代码

//  Create the task builder object to create the task.
ITaskDefinition *pTask = NULL;
hr = pService->NewTask( 0, &pTask );

pService->Release();  // COM clean up.  Pointer is no longer used.
if (FAILED(hr))
{
    printf("Failed to create a task definition: %x", hr);
    pRootFolder->Release();
    CoUninitialize();
    return 1;
}

【问题讨论】:

  • XML 在 pTask 属性中。你能展示一下你是如何初始化 pTask 的吗?
  • @John:查看 pTask init 问题中的编辑

标签: c++ winapi scheduled-tasks


【解决方案1】:

我不确定这是否是您错误的原因,但请查看ITaskFolder::RegisterTaskDefinition 的文档和您的代码:

hr = pRootFolder->RegisterTaskDefinition(  // line 289
        _bstr_t( wszTaskName ),
        pTask,
        TASK_CREATE_OR_UPDATE, 
        _variant_t(L"soribo"), // put in my windows username again (I'm the admin)
        _variant_t(L"XXXXXX"), // put in my user password & no its not really XXXXXX :P 
        TASK_LOGON_GROUP,
        _variant_t(L""),
        &pRegisteredTask);

我看到您正在使用 TASK_LOGON_GROUP,但传递了用户名密码。如果您使用 TASK_LOGON_GROUP,您可能应该使用组名(如 L"Builtin\\Administrators"L"S-1-5-32-545")和 VT_NULL 作为密码。

【讨论】:

    猜你喜欢
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 2014-03-23
    • 2010-12-22
    • 2016-10-30
    • 2013-10-26
    • 2011-09-26
    相关资源
    最近更新 更多