使用.net以编程方式将第二个进程附加到VS2010
Attach a second process to VS2010 programmatically with .NET
我在visual studio 2010中有一个解决方案,它包含两个项目,一个是c#控制台应用程序,我将其称为Foo,另一个是CLR c++控制台应用程序,我将其称为Bar。Bar是exe而不是dll。当Debug会话启动时,它通过运行Foo启动。Foo使用下面的代码启动Bar的进程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))
我在这里做错了什么?
这里写着:
http://msdn.microsoft.com/en-us/library/ms228772.aspx认为这是因为COM在处理多线程应用程序时存在一些问题。他们提供了一个示例代码,邀请您在被拒绝时使用IOleMessageFilter
来重试调用。
相关文章:
- boost::进程间消息队列引发错误
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 是否可以通过C++扩展强制多个python进程共享同一内存
- IPC使用多个管道和分支进程来运行Python程序
- 异常属于C++中的线程还是进程
- WMI检测进程创建事件-c++
- c++多进程编写一个唯一的文件
- 如何在C++中将函数发送到另一个进程
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 终止 QProcess 不会终止子进程
- 如何在C++(VS2010)中设置超时读取USB端口?
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- Windows 进程间同步类似事件?
- 在挂钩启动新线程时解除挂钩进程
- pclose() 不会给我进程退出代码
- 运行代码时,c++ 会终止进程
- 提升 vs2010 上的进程错误
- 使用.net以编程方式将第二个进程附加到VS2010