public ManagedCallback GetProcessCallbackInterface(string name, ICorDebugThread pThread) { ICorDebugProcess pProcess; try { pProcess = pThread.Process; } catch (COMException e) { debugger.TraceMessage("Ignoring callback \"" + name + "\": " + e.Message); return(null); } return(GetProcessCallbackInterface(name, pProcess)); }
static unsafe public Process CreateProcess(NDebugger debugger, string filename, string workingDirectory, string arguments) { debugger.TraceMessage("Executing " + filename + " " + arguments); uint[] processStartupInfo = new uint[17]; processStartupInfo[0] = sizeof(uint) * 17; uint[] processInfo = new uint[4]; ICorDebugProcess outProcess; if (string.IsNullOrEmpty(workingDirectory)) { workingDirectory = System.IO.Path.GetDirectoryName(filename); } _SECURITY_ATTRIBUTES secAttr = new _SECURITY_ATTRIBUTES(); secAttr.bInheritHandle = 0; secAttr.lpSecurityDescriptor = IntPtr.Zero; secAttr.nLength = (uint)sizeof(_SECURITY_ATTRIBUTES); fixed(uint *pprocessStartupInfo = processStartupInfo) { fixed(uint *pprocessInfo = processInfo) { outProcess = debugger.CorDebug.CreateProcess( filename, // lpApplicationName // If we do not prepend " ", the first argument migh just get lost " " + arguments, // lpCommandLine ref secAttr, // lpProcessAttributes ref secAttr, // lpThreadAttributes 1, //TRUE // bInheritHandles 0x00000010 /*CREATE_NEW_CONSOLE*/, // dwCreationFlags IntPtr.Zero, // lpEnvironment workingDirectory, // lpCurrentDirectory (uint)pprocessStartupInfo, // lpStartupInfo (uint)pprocessInfo, // lpProcessInformation, CorDebugCreateProcessFlags.DEBUG_NO_SPECIAL_OPTIONS // debuggingFlags ); } } return(new Process(debugger, outProcess, filename, workingDirectory)); }
static unsafe public Process CreateProcess(NDebugger debugger, string filename, string workingDirectory, string arguments) { debugger.TraceMessage("Executing " + filename); uint[] processStartupInfo = new uint[17]; processStartupInfo[0] = sizeof(uint) * 17; uint[] processInfo = new uint[4]; ICorDebugProcess outProcess; if (workingDirectory == null || workingDirectory == "") { workingDirectory = System.IO.Path.GetDirectoryName(filename); } fixed(uint *pprocessStartupInfo = processStartupInfo) fixed(uint *pprocessInfo = processInfo) outProcess = debugger.CorDebug.CreateProcess( filename, // lpApplicationName // If we do not prepend " ", the first argument migh just get lost " " + arguments, // lpCommandLine ref _SECURITY_ATTRIBUTES.Default, // lpProcessAttributes ref _SECURITY_ATTRIBUTES.Default, // lpThreadAttributes 1, //TRUE // bInheritHandles 0x00000010 /*CREATE_NEW_CONSOLE*/, // dwCreationFlags IntPtr.Zero, // lpEnvironment workingDirectory, // lpCurrentDirectory (uint)pprocessStartupInfo, // lpStartupInfo (uint)pprocessInfo, // lpProcessInformation, CorDebugCreateProcessFlags.DEBUG_NO_SPECIAL_OPTIONS // debuggingFlags ); Process process = new Process(debugger, outProcess); process.workingDirectory = workingDirectory; return(process); }
static unsafe public Process CreateProcess(NDebugger debugger, string filename, string workingDirectory, string arguments) { debugger.TraceMessage("Executing " + filename + " " + arguments); uint[] processStartupInfo = new uint[17]; processStartupInfo[0] = sizeof(uint) * 17; uint[] processInfo = new uint[4]; ICorDebugProcess outProcess; if (workingDirectory == null || workingDirectory == "") { workingDirectory = System.IO.Path.GetDirectoryName(filename); } _SECURITY_ATTRIBUTES secAttr = new _SECURITY_ATTRIBUTES(); secAttr.bInheritHandle = 0; secAttr.lpSecurityDescriptor = IntPtr.Zero; secAttr.nLength = (uint)sizeof(_SECURITY_ATTRIBUTES); fixed (uint* pprocessStartupInfo = processStartupInfo) fixed (uint* pprocessInfo = processInfo) outProcess = debugger.CorDebug.CreateProcess( filename, // lpApplicationName // If we do not prepend " ", the first argument migh just get lost " " + arguments, // lpCommandLine ref secAttr, // lpProcessAttributes ref secAttr, // lpThreadAttributes 1,//TRUE // bInheritHandles 0x00000010 /*CREATE_NEW_CONSOLE*/, // dwCreationFlags IntPtr.Zero, // lpEnvironment workingDirectory, // lpCurrentDirectory (uint)pprocessStartupInfo, // lpStartupInfo (uint)pprocessInfo, // lpProcessInformation, CorDebugCreateProcessFlags.DEBUG_NO_SPECIAL_OPTIONS // debuggingFlags ); return new Process(debugger, outProcess, workingDirectory); }
static unsafe Process StartInternal(NDebugger debugger, string filename, string workingDirectory, string arguments) { debugger.TraceMessage("Executing " + filename); uint[] processStartupInfo = new uint[17]; processStartupInfo[0] = sizeof(uint) * 17; uint[] processInfo = new uint[4]; SafeFileHandle prnt_inp; SafeFileHandle prnt_out; SafeFileHandle prnt_err; SafeFileHandle input_handle; SafeFileHandle output_handle; SafeFileHandle err_handle; // CreatePipe(out prnt_out,out output_handle,false); // CreatePipe(out prnt_inp,out input_handle,true); STARTUPINFO startupInfo = new STARTUPINFO(); startupInfo.cb = Marshal.SizeOf(startupInfo); SECURITY_ATTRIBUTES lpPipeAttributes = new SECURITY_ATTRIBUTES(); lpPipeAttributes.bInheritHandle = true; //CreatePipe(out output_handle, out input_handle,lpPipeAttributes,0); CreatePipe(out prnt_inp, out input_handle, true); CreatePipe(out prnt_out, out output_handle, false); CreatePipe(out prnt_err, out err_handle, false); startupInfo.hStdInput = input_handle; startupInfo.hStdOutput = output_handle; startupInfo.hStdError = err_handle; ICorDebugProcess outProcess; // processStartupInfo[14] = (uint)GCHandle.Alloc(input_handle,GCHandleType.Pinned).AddrOfPinnedObject().ToInt32(); // processStartupInfo[15] = (uint)GCHandle.Alloc(output_handle,GCHandleType.Pinned).AddrOfPinnedObject().ToInt32(); StreamWriter standardInput = new StreamWriter(new FileStream(prnt_inp, FileAccess.Write, 0x1000, false), Encoding.GetEncoding(GetConsoleCP()), 0x1000); standardInput.AutoFlush = true; Encoding encoding = Encoding.GetEncoding(GetConsoleOutputCP()); StreamReader standardOutput = new StreamReader(new FileStream(prnt_out, FileAccess.Read, 0x1000, false), encoding, true, 0x1000); StreamReader errorOutput = new StreamReader(new FileStream(prnt_err, FileAccess.Read, 0x1000, false), encoding, true, 0x1000); if (workingDirectory == null || workingDirectory == "") { workingDirectory = System.IO.Path.GetDirectoryName(filename); } fixed(uint *pprocessStartupInfo = processStartupInfo) fixed(uint *pprocessInfo = processInfo) outProcess = debugger.CorDebug.CreateProcess( filename, // lpApplicationName // If we do not prepend " ", the first argument migh just get lost " " + arguments, // lpCommandLine ref _SECURITY_ATTRIBUTES.Default, // lpProcessAttributes ref _SECURITY_ATTRIBUTES.Default, // lpThreadAttributes 1, //TRUE // bInheritHandles //0x00000010 /*CREATE_NEW_CONSOLE*/, // dwCreationFlags 0x08000000, IntPtr.Zero, // lpEnvironment workingDirectory, // lpCurrentDirectory startupInfo, //(uint)pprocessStartupInfo, // lpStartupInfo (uint)pprocessInfo, // lpProcessInformation, CorDebugCreateProcessFlags.DEBUG_NO_SPECIAL_OPTIONS // debuggingFlags ); Process p = new Process(debugger, outProcess); p.StandardInput = standardInput; p.StandardOutput = standardOutput; p.StandardError = errorOutput; return(p); }
static unsafe Process StartInternal(NDebugger debugger, string filename, string workingDirectory, string arguments) { debugger.TraceMessage("Executing " + filename); uint[] processStartupInfo = new uint[17]; processStartupInfo[0] = sizeof(uint) * 17; uint[] processInfo = new uint[4]; SafeFileHandle prnt_inp; SafeFileHandle prnt_out; SafeFileHandle prnt_err; SafeFileHandle input_handle; SafeFileHandle output_handle; SafeFileHandle err_handle; // CreatePipe(out prnt_out,out output_handle,false); // CreatePipe(out prnt_inp,out input_handle,true); STARTUPINFO startupInfo = new STARTUPINFO(); startupInfo.cb = Marshal.SizeOf(startupInfo); SECURITY_ATTRIBUTES lpPipeAttributes = new SECURITY_ATTRIBUTES(); lpPipeAttributes.bInheritHandle = true; //CreatePipe(out output_handle, out input_handle,lpPipeAttributes,0); CreatePipe(out prnt_inp, out input_handle, true); CreatePipe(out prnt_out, out output_handle, false); CreatePipe(out prnt_err, out err_handle, false); startupInfo.hStdInput = input_handle; startupInfo.hStdOutput = output_handle; startupInfo.hStdError = err_handle; ICorDebugProcess outProcess; // processStartupInfo[14] = (uint)GCHandle.Alloc(input_handle,GCHandleType.Pinned).AddrOfPinnedObject().ToInt32(); // processStartupInfo[15] = (uint)GCHandle.Alloc(output_handle,GCHandleType.Pinned).AddrOfPinnedObject().ToInt32(); StreamWriter standardInput = new StreamWriter(new FileStream(prnt_inp, FileAccess.Write, 0x1000, false), Encoding.GetEncoding(GetConsoleCP()), 0x1000); standardInput.AutoFlush = true; Encoding encoding = Encoding.GetEncoding(GetConsoleOutputCP()); StreamReader standardOutput = new StreamReader(new FileStream(prnt_out, FileAccess.Read, 0x1000, false), encoding, true, 0x1000); StreamReader errorOutput = new StreamReader(new FileStream(prnt_err, FileAccess.Read, 0x1000, false), encoding, true, 0x1000); if (workingDirectory == null || workingDirectory == "") { workingDirectory = System.IO.Path.GetDirectoryName(filename); } fixed (uint* pprocessStartupInfo = processStartupInfo) fixed (uint* pprocessInfo = processInfo) outProcess = debugger.CorDebug.CreateProcess( filename, // lpApplicationName // If we do not prepend " ", the first argument migh just get lost " " + arguments, // lpCommandLine ref _SECURITY_ATTRIBUTES.Default, // lpProcessAttributes ref _SECURITY_ATTRIBUTES.Default, // lpThreadAttributes 1,//TRUE // bInheritHandles //0x00000010 /*CREATE_NEW_CONSOLE*/, // dwCreationFlags 0x08000000, IntPtr.Zero, // lpEnvironment workingDirectory, // lpCurrentDirectory startupInfo, //(uint)pprocessStartupInfo, // lpStartupInfo (uint)pprocessInfo, // lpProcessInformation, CorDebugCreateProcessFlags.DEBUG_NO_SPECIAL_OPTIONS // debuggingFlags ); Process p = new Process(debugger, outProcess); p.StandardInput = standardInput; p.StandardOutput = standardOutput; p.StandardError = errorOutput; return p; }