我在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;
}
答案 0 :(得分:1)
您正在使用Task Scheduler 2.0 API创建任务,但正尝试使用旧的1.0 API访问它。
任务调度程序及其COM API已针对Windows Vista进行了重新设计,并且任务计划程序1.0 API不能用于访问使用新界面的任务(可能是因为它使用了一种非常不同的设计,允许大量新的特征)。您可以使用此示例代码创建backward compatible task,在使用MMC管理单元创建任务时选择“配置为:Windows Server 2003,Windows XP或Windows 2000”,或者可能通过创建它来创建使用旧的API(虽然我在一个简单的测试应用程序中没有成功)。根文件夹中的任务以这种方式为我工作,有或没有前导反斜杠;子文件夹中的任务似乎根本不可访问 如果您对与旧版Windows的兼容性不感兴趣,则可以使用新API访问该任务。
两个API版本都存在MSDN examples(注意顶部/底部分隔),the new features relevant for developers也列在那里。