C++Win32计划任务由于XML错误而失败

C++ Win32 Schedule Task Fails because of bad XML

本文关键字:错误 失败 XML 计划 任务 C++Win32      更新时间:2023-10-16

我在摆弄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代码?

EDIT:显示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;
}

我不确定这是否是您错误的原因,但请查看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作为密码。

相关文章: