- 
                Notifications
    You must be signed in to change notification settings 
- Fork 5.2k
Description
Currently if you call Process.Start internally CreateProcess is called with bInheritHandles = true (hard coded). It would be great to make it possible to change this behavior, e.g. by adding a Property to ProcessStartInfo.
Currently there is no way I know of to change this other then reimplementing System.Diagnostics.Process.
Example
If you run this application twice without exiting the first notepad instance the second instance will not be able to open the tcp port, because notepad is still running. This can be a problem for server applications that are starting child processes themself and crash, or are killed by the user before the socket can be closed.
using System.Diagnostics;
using System.Net;
using System.Net.Sockets;
class Program
{
    static void Main()
    {
        TcpListener listener = new TcpListener(IPAddress.Any, 4567);
        listener.Start();
        Process.Start(new ProcessStartInfo("notepad.exe") { UseShellExecute = false });
        //Simulate application crash without freeing resources
    }
}Design proposal
The easiest way to make this possible is to add a new Property to ProcessStartInfo and use this in the Call to CreateProcess
namespace System.Diagnostics
{
    public partial class ProcessStartInfo
    {
        public bool InheritHandles
        {
            get;  // defaults to true
            [MinimumOSPlatform("windows7.0")]
            set;
        }
    }
}Questions
- Is there a very important reason why this was hardcoded like this in the first place?