【问题标题】:Attach a second process to VS2010 programmatically with .NET使用 .NET 以编程方式将第二个进程附加到 VS2010
【发布时间】:2013-05-16 02:45:05
【问题描述】:

我在 Visual Studio 2010 中有一个解决方案,其中包含 2 个项目,一个是 C# 控制台应用程序,我将其称为 Foo,另一个是 CLR C++ 控制台应用程序,我将其称为 Bar。 Bar是一个exe而不是一个dll。调试会话开始时是通过运行 Foo 启动的。 Foo 使用代码启动 Bar 的 Process System.Diagnostics.Process procBar = System.Diagnostics.Process.Start(pathToBarEXE) 然后,我想以编程方式将该 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))我在这里做错了什么?

【问题讨论】:

    标签: c# c++ .net visual-studio-2010 debugging


    【解决方案1】:

    他们在这里说:

    http://msdn.microsoft.com/en-us/library/ms228772.aspx

    这是因为 COM 在处理多线程应用程序时存在一些问题。他们正在展示一个示例代码,邀请您在被拒绝时使用IOleMessageFilter 重试呼叫。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-04
      • 1970-01-01
      • 1970-01-01
      • 2020-06-17
      • 1970-01-01
      • 2016-12-18
      • 1970-01-01
      相关资源
      最近更新 更多