使用.NET以编程方式将第二个进程附加到VS2010

7
我有一个Visual Studio 2010的解决方案,包含2个项目。其中之一是C#控制台应用程序,我将其称为Foo;另一个是CLR C++控制台应用程序,我将其称为Bar,它是一个exe而不是dll。当调试会话开始时,它通过使用代码“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))。我在这里做错了什么?

1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接