С ++ Задача планирования Win32 не выполняется из-за плохого XML - PullRequest
0 голосов
/ 18 июня 2011

Я работаю с планировщиком задач 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;
}

1 Ответ

0 голосов
/ 18 июня 2011

Я не уверен, является ли это причиной вашей ошибки, но, глядя на документацию 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 для пароля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...