private static extern bool UnmanagedCreateProcess(string lpApplicationName, string lpCommandLine, IntPtr lpProcessAttributes, IntPtr lpThreadAttributes, bool bInheritHandles, ProcessCreationFlags dwCreationFlags, IntPtr lpEnvironment, string lpCurrentDirectory, ref ProcessStartupInfo lpStartupInfo, out ProcessInformation lpProcessInformation);
/// <summary> /// Creates a new process and its primary thread. /// </summary> /// <param name="commandLine"></param> /// <param name="creationFlags"></param> /// <param name="currentDirectory"></param> /// <param name="startupInfo"></param> /// <param name="processInformation"></param> /// <exception cref="Win32Exception"></exception> public static void CreateProcess(string commandLine, ProcessCreationFlags creationFlags, string currentDirectory, ref ProcessStartupInfo startupInfo, out ProcessInformation processInformation) { if (!UnmanagedCreateProcess(null, commandLine, IntPtr.Zero, IntPtr.Zero, false, creationFlags, IntPtr.Zero, currentDirectory, ref startupInfo, out processInformation)) { throw new Win32Exception(); } }
private Tuple<uint, uint> CreateSuspendedProcess(string filePath, string arguments = "") { ProcessInformation processInfo; ProcessStartupInfo startupInfo = new ProcessStartupInfo(); Kernel32.CreateProcess(filePath + " " + arguments, ProcessCreationFlags.CreateSuspended, Path.GetDirectoryName(filePath), ref startupInfo, out processInfo); return new Tuple<uint, uint>(processInfo.ProcessId, processInfo.ThreadId); }