Я использую / изучаю планировщик заданий Windows в win32 C ++. Я пытаюсь получить объект задачи (для существующей задачи), но он постоянно завершается ошибкой и возвращает ошибку COR_E_FILENOTFOUND 0x80070002 = Задача не существует
Как вы думаете, что идет не так? Я знаю, что эта задача существует, потому что я ее создаю (и она делает то, что должна, открывает приложение в указанное время).
Может быть, имя задачи, которое я использую для получения объекта ITask, неверно? Статус (приоритет?) Задачи, которую я создаю, равен == 3 (если эта информация помогает).
Код, который я использую для создания задачи, в точности совпадает с кодом примера из msdn , имя задачи - «MyTaskSascha».
Что-то не так с моим кодом для извлечения существующей задачи (Я полагаю, что задача, которую я пытаюсь получить, не считается «выполняющейся», а «запланированной», так что, возможно, проблема?):
bool RemoveTask( std::string taskName )
{
// Post:
ITaskScheduler *taskSched = NULL;
ITask *task = NULL;
HRESULT hr = S_OK;
HRESULT taskStatus = NULL;
LPCWSTR wTaskName;
wTaskName = L"MyTestSascha";
/// Initialise COM library & obtain Task Scheduler object
hr = CoInitialize( NULL );
if ( FAILED(hr) )
{
printf( "Failed to coinitialise hresult \n" );
return false;
}
hr = CoCreateInstance( CLSID_CTaskScheduler, NULL, CLSCTX_INPROC_SERVER,
IID_ITaskScheduler, (void**) &taskSched );
if ( FAILED(hr) )
{
printf( "Failed to create instance \n" );
CoUninitialize();
return false;
}
/// Obtain task object
hr = taskSched -> Activate( wTaskName, IID_ITask, (IUnknown**) &task );
taskSched -> Release();
std::cout << wTaskName << std::endl;
printf( "%s \n", wTaskName );
if ( FAILED(hr) )
{
// COR_E_FILENOTFOUND E_INVALIDARG E_OUTOFMEMORY SCHED_E_UNKNOWN_OBJECT_VERSION
if ( hr == 0x80070002 ) { std::cout << "The task does not exist \n"; }
else if ( hr == 0x80000003 ) { std::cout << "The pwszName parameter is not valid \n"; }
else if ( hr == 0x80070057 ) { std::cout << "A memory allocation failed \n"; }
else if ( hr == 0x80041313 ) { std::cout << "The task object version is either unsupported or invalid \n"; }
printf( "Failed retrieving task object %x \n", hr );
CoUninitialize();
return false;
}