我在 Visual Studio 2010 中有一个包含 2 个项目的解决方案,一个是 C# 控制台应用程序,我将其称为 Foo,另一个是 CLR C++ 控制台应用程序,我将其称为 Bar。Bar是一个exe而不是一个dll。调试会话开始时是通过运行 Foo 启动的。System.Diagnostics.Process procBar = System.Diagnostics.Process.Start(pathToBarEXE)
Foo 使用我想要的代码启动 Bar 的进程,
然后以编程方式将该 Bar.exe 附加到当前运行的调试器。我有一个应该做的功能(在互联网上随处可见)
public void AttachToProcess(int processId)
{
foreach (EnvDTE.Process process in DTE.Debugger.LocalProcesses)
{
if (process.ProcessID == processId)
{
process.Attach();
DTE.Debugger.CurrentProcess = process;
}
}
}
但该函数无法编译,因为 DTE 是一个接口。我因此修改了功能
public void AttachToProcess(int processId)
{
EnvDTE80.DTE2 dte2;
dte2 = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.10.0");
foreach (EnvDTE.Process process in dte2.Debugger.LocalProcesses)
{
if (process.ProcessID == processId)
{
process.Attach();
}
}
}
它编译并运行,但是当它找到 Bar 的进程时,if 语句抛出异常The message filter indicated that the application is busy. (Exception from HRESULT: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER))
我在这里做错了什么?