int IDebugRemoteCorDebug.DebugActiveProcessEx(IDebugPort2 pPort, uint id, int win32Attach, out object ppProcess) { ppProcess = null; try { MessageCentre.DebugMessage(Resources.ResourceStrings.Attach); AD_PROCESS_ID pid = new AD_PROCESS_ID(); pid.ProcessIdType = (uint)AD_PROCESS_ID_TYPE.AD_PROCESS_ID_SYSTEM; pid.dwProcessId = id; IDebugProcess2 iDebugProcess; pPort.GetProcess(pid, out iDebugProcess); CorDebugProcess process = (CorDebugProcess)iDebugProcess; // StartDebugging() will either get a connected device into a debuggable state and start the dispatch thread, or throw. process.StartDebugging(this, false); ppProcess = process; return(COM_HResults.S_OK); } catch (ProcessExitException) { MessageCentre.DebugMessage(Resources.ResourceStrings.AttachFailedProcessDied); return(COM_HResults.S_FALSE); } catch (Exception ex) { MessageCentre.DebugMessage(Resources.ResourceStrings.AttachFailed); MessageCentre.InternalErrorMessage(false, ex.Message); return(COM_HResults.S_FALSE); } }
int IDebugRemoteCorDebug.CreateProcessEx(Microsoft.VisualStudio.Debugger.Interop.IDebugPort2 pPort, string lpApplicationName, string lpCommandLine, System.IntPtr lpProcessAttributes, System.IntPtr lpThreadAttributes, int bInheritHandles, uint dwCreationFlags, System.IntPtr lpEnvironment, string lpCurrentDirectory, ref CorDebugInterop._STARTUPINFO lpStartupInfo, ref CorDebugInterop._PROCESS_INFORMATION lpProcessInformation, uint debuggingFlags, out object ppProcess) { ppProcess = null; try { // CreateProcessEx() is guaranteed to return a valid process object, or throw an exception CorDebugProcess process = CorDebugProcess.CreateProcessEx(pPort, lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, ref lpStartupInfo, ref lpProcessInformation, debuggingFlags); // StartDebugging() will either get a connected device into a debuggable state and start the dispatch thread, or throw. process.StartDebugging(this, true); ppProcess = process; return(COM_HResults.S_OK); } catch (ProcessExitException) { MessageCentre.DebugMessage(Resources.ResourceStrings.InitializeProcessFailedProcessDied); return(COM_HResults.S_FALSE); } catch (Exception ex) { MessageCentre.DebugMessage(Resources.ResourceStrings.InitializeProcessFailed); MessageCentre.InternalErrorMessage(false, ex.Message); return(COM_HResults.S_FALSE); } }