none
从Winform进程使用Process启动一个控制台应用并且设置UseShellExecute=false后无法释放掉已经开启的侦听端口

    问题

  • .Net版本 4.0 

    创建了一个Winform应用,此应用使用Process启动了另一个控制台应用程序(比如CMD.exe),并设置了UseShellExecute=false 

    随后Winform应用内的TcpListener侦听的端口Stop时成功,但端口没有被释放,可以使用工具查看到此端口仍在监听状态,再次启动时,无法启动监听报端口被占用异常。

    只要Process进程没有退出,监听的端口会一直被占用,调用TcpListener.Stop()不会报异常,但是没有效果,

    无论先启动Process还是后启动结果都 一样

    如果不设置UseShellExecute=false 不会出现此现象,但有一个控制台窗口,这不是我想要的

    请问如何才能避免此问题 

    2016年7月11日 12:01

全部回复

  •   //p.StartInfo.UseShellExecute = false;//不使用系统外壳程序启动,重定向输出的话必须设为false

    如果不想设置以上值的话,使用下面的设置可以不显示控制台窗口,但如果确实需要重定向输出则还是没辙

    p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

    2016年7月11日 12:49
  • Hi Kureabs,

    Process不是有个createnowindow属性吗,把它设为true试试。

    process.CreateNoWindow   =   true;

    Regards,

    Moonlight


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.


    2016年7月12日 9:03