使用 com 对象删除计划任务
Delete a scheduled task using com objects
我尝试使用以下代码来删除计划任务:
bool deleteTask(std::wstring taskName)
{
if (FAILED(CoInitialize(nullptr))) {
return false;
}
ITaskScheduler *pITS;
if (FAILED(CoCreateInstance(CLSID_CTaskScheduler, nullptr, CLSCTX_INPROC_SERVER, IID_ITaskScheduler, (void **)&pITS))) {
CoUninitialize();
return false;
}
HRESULT hr = pITS->Delete(taskName.c_str());
pITS->Release();
CoUninitialize();
if (FAILED(hr)) {
if (hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)) {
wprintf(L"ERROR_FILE_NOT_FOUND");
}
return false;
}
return true;
}
执行deleteTask(L"exampletask");
时 即使执行schtasks.exe /Query /TN exampletask
返回现有任务,该方法pITS->Delete
也会返回ERROR_FILE_NOT_FOUND
。
我还以管理员/系统/服务的权限尝试了此代码,但没有成功查找和删除任务。
是否缺少一些参数,或者应该调用的方法?
谢谢!
正如@IInspectable建议的那样,解决方案是使用任务计划程序 2.0 接口, 例如ITaskService
而不是ITaskScheduler
,ITaskFolder->DeleteTask
而不是ITaskScheduler->Delete
。
bool deleteTask(std::wstring taskName)
{
if (FAILED(CoInitialize(nullptr))) {
return false;
}
ITaskService *pITS;
if (FAILED(CoCreateInstance(CLSID_TaskScheduler, nullptr, CLSCTX_INPROC_SERVER, IID_ITaskService, (void **)&pITS))) {
CoUninitialize();
return false;
}
if (FAILED(pITS->Connect(_variant_t(), _variant_t(), _variant_t(), _variant_t()))) {
pITS->Release();
CoUninitialize();
return false;
}
ITaskFolder *pITF;
if (FAILED(pITS->GetFolder(_bstr_t(L"\"), &pITF))) {
pITS->Release();
CoUninitialize();
return false;
}
pITS->Release();
if (FAILED(pITF->DeleteTask(_bstr_t(taskName.c_str()), 0))) {
pITF->Release();
CoUninitialize();
return false;
}
pITF->Release();
CoUninitialize();
return true;
}
相关文章:
- 有没有任务栏API可以立即应用注册表更改
- Windows 并发运行时任务计划,但有例外
- 任务计划程序库的预处理不起作用 - 多定义错误
- 任务计划程序:设置运行级别时拒绝访问
- 使用 com 对象删除计划任务
- 如何使用 c++ 在任务计划程序中检查任务的触发器
- 如何在任务计划程序中显示所有任务
- 如何在C++中创建高效的多线程任务计划程序
- 以编程方式简化 Windows 的计划任务
- 如何重新计划并发任务
- c ++中是否有任何内置功能可以在计划的时间运行任务
- 为什么此代码在通过任务计划程序运行时不起作用
- 如何在任务计划程序中使用用户输入
- 如何使用C++在任务计划程序中创建任务
- 如何在不提示输入密码的情况下设置计划任务
- .exe按计划任务运行不会写入文件
- 简单的c++程序无法作为计划任务运行(交互式/非交互式问题?)
- 无需用户凭证的Windows每日任务计划
- c++登录任务计划错误:没有完成帐户名和安全id之间的映射
- C++Win32计划任务由于XML错误而失败