作为 IE 6/7 的 JavaScript Profiler 的一部分,我需要将我创建的自定义调试器加载到 IE 中。我在 XP 上运行得很好,但在 Vista 上却无法运行(全文如下: http://damianblog.com/2008/09/09/tracejs-v2-rip/).

在 Vista 上调用 GetProviderProcessData 失败。有人有什么建议吗?

谢谢,达米安

// Create the MsProgramProvider
IDebugProgramProvider2* pIDebugProgramProvider2 = 0;
HRESULT st = CoCreateInstance(CLSID_MsProgramProvider, 0, CLSCTX_ALL, IID_IDebugProgramProvider2, (void**)&pIDebugProgramProvider2);
if(st != S_OK) {
    return st;
}

// Get the IDebugProgramNode2 instances running in this process
AD_PROCESS_ID processID;
processID.ProcessId.dwProcessId = GetCurrentProcessId();
processID.ProcessIdType = AD_PROCESS_ID_SYSTEM;

CONST_GUID_ARRAY engineFilter;
engineFilter.dwCount = 0;

PROVIDER_PROCESS_DATA processData;

st = pIDebugProgramProvider2->GetProviderProcessData(PFLAG_GET_PROGRAM_NODES|PFLAG_DEBUGGEE, 0, processID, engineFilter, &processData);
if(st != S_OK) {
    ShowError(L"GPPD Failed", st);
    pIDebugProgramProvider2->Release();
    return st;
}
有帮助吗?

解决方案

这将有助于了解错误结果是什么。

我能想到的可能出现的问题:

如果您的许可被拒绝,您很可能错过了一些必需的内容 特权 在你的 ACL 中。有时新的内容没有得到很好的记录,请检查最新的 Platform SDK 标头,看看是否还有新的内容。在 vista 下,可能不再将默认权限分配给您的 ACL。

如果您收到某种“未找到”类型错误,则可能是 32 位/64 位问题。您的调试 API 可能仅在 vista 64 上的 64 位 COM 下可用。32 位/64 位互操作可能会非常混乱。

其他提示

我不熟悉这些界面,但 Vista 中的意外故障可能需要经过 UAC 提示。您是否尝试过以管理员权限启动调试器?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top