调用ITaskScheduler :: Activate失败

问题描述 投票:1回答:1

我想获取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个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.