2013-05-16 9 views
7

Ho una soluzione in Visual Studio 2010 che contiene 2 progetti, una è un'applicazione console C#, a cui farò riferimento come Foo, e l'altra è un'applicazione console CLR C++ , che chiamerò Bar. Bar è un exe non una dll. All'avvio della sessione di debug, viene avviato eseguendo Foo. Foo avvia il processo di Bar utilizzando il codice System.Diagnostics.Process procBar = System.Diagnostics.Process.Start(pathToBarEXE) Desidero quindi collegare Bar.exe al debugger attualmente in esecuzione a livello di programmazione. Ho una funzione che dovrebbe farlo (visto ovunque su internet)Collegare un secondo processo a VS2010 a livello di codice con .NET

public void AttachToProcess(int processId) 
    { 
     foreach (EnvDTE.Process process in DTE.Debugger.LocalProcesses) 
     { 
      if (process.ProcessID == processId) 
      { 
       process.Attach(); 
       DTE.Debugger.CurrentProcess = process; 
      } 
     } 
    } 

ma la funzione non si compila, come DTE è un'interfaccia. Ho modificato la funzione di questa convenzione

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(); 
      } 
     } 
    } 

ed è compilato ed eseguito, ma quando si trova il processo di Bar, l'istruzione if genera l'eccezione The message filter indicated that the application is busy. (Exception from HRESULT: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER)) Che cosa sto facendo male qui?

risposta

1

dicono qui:

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

che è perché COM ha alcuni problemi che si occupano di applicazioni multithread. Presentano un codice di esempio che invita l'utente a utilizzare IOleMessageFilter per riprovare la chiamata quando viene rifiutato in questo modo.

Problemi correlati