【问题标题】:Failed calling ITaskScheduler::Activate调用 ITaskScheduler::Activate 失败
【发布时间】:2019-02-12 15:38:33
【问题描述】:

我想获取 Windows 计划任务信息。我从 MSDN source 复制了这段代码。

///////////////////////////////////////////////////////////////////
  // Call ITaskScheduler::Activate to get the Task object.
  ///////////////////////////////////////////////////////////////////

  ITask *pITask;
  LPCWSTR lpcwszTaskName;
  lpcwszTaskName = L"Test Task";
  hr = pITS->Activate(lpcwszTaskName,
                      IID_ITask,
                      (IUnknown**) &pITask);

  pITS->Release();
  if (FAILED(hr))
  {
     wprintf(L"Failed calling ITaskScheduler::Activate; error = 0x%x\n",hr);
     CoUninitialize();
     return 1;
  }

它在我的 Win10 X64 电脑上运行良好。但它在另一台 Win7 X86 计算机上失败。 当我使用远程调试器时,错误代码是0x80070002。 VS 调试器告诉我这意味着ERROR_FILE_NOT_FOUND。但我去 ERROR_FILE_NOT_FOUND 的定义

#define ERROR_FILE_NOT_FOUND             2L

这是一个不同的代码。

当我直接在 Win7 x86 计算机上运行程序时。它给了我另一个错误代码

0x8007007b

我找不到意思。 所以不知道为什么在Win7电脑上调用失败。

【问题讨论】:

    标签: winapi com


    【解决方案1】:

    0x80070002等于HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),所以和ERROR_FILE_NOT_FOUND的意思一样。

    0x8007007b 等于 HRESULT_FROM_WIN32(ERROR_INVALID_NAME)

    所以这两个错误代码似乎都表明您要查找的任务不存在。

    将来,当您看到以0x8 开头的错误代码时,它很可能是HRESULT 值。剖析维基百科描述的HRESULT代码给出:

    • 0x80000000 表示失败。
    • 我们的设施值为 7 ((hr & 0x07FF0000 ) >> 16),这意味着 Win32 错误
    • 低 16 位(hr & 0xFFFF -> 0x00020x007b 在这些情况下)是您可以在 reference 中查找的实际错误值。

    Firegiant 提供了一个nice web service 用于直接查找HRESULT 值和其他类型的错误代码。

    【讨论】:

    • 其实我换了另一种方式来获取任务时间。该文件说这种方法是旧的。
    猜你喜欢
    • 2010-12-01
    • 2022-11-18
    • 2020-06-05
    • 1970-01-01
    • 2018-02-03
    • 2016-04-04
    • 2021-04-20
    • 2014-05-29
    • 2021-12-23
    相关资源
    最近更新 更多