调用失败 ITaskScheduler::Activate

Failed calling ITaskScheduler::Activate

我想获取 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 计算机上失败。 当我使用 Remote Debugger 时,错误代码是 0x80070002。 VS 调试器告诉我这意味着 ERROR_FILE_NOT_FOUND。但是我去定义ERROR_FILE_NOT_FOUND

#define ERROR_FILE_NOT_FOUND             2L

代码不同。

而当我运行程序直接在Win7 x86电脑上。它给了我另一个错误代码

0x8007007b

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

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 值和其他类型的错误代码。