【发布时间】:2011-01-15 00:01:11
【问题描述】:
我正在使用/学习 win32 C++ 中的 Windows 任务计划程序。我正在尝试检索任务对象(对于存在的任务),但它不断失败并返回错误 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;
}
【问题讨论】: