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?