(有一个非常相似的话题从未得到解决:这里)
我们有一个在多个客户端上运行的大型应用程序,但最近我的一些代码停止工作。添加一些调试代码我发现代码在调用 Process.Start() 时停止(没有设置 shellexecute=true)。
通话很简单
Process.Start(new ProcessStartInfo("program"))
在 BackgroundWorker 线程中。
“程序”应用程序执行它应该执行的操作并退出。
当线程在后台时,我们的应用程序会继续运行,但如果应用程序在 GUI 线程上运行另一个 Process.Start,则应用程序会锁定。如果使用 X 按钮关闭应用程序,则应用程序仍会显示在任务管理器中,因为线程仍被 Process.Start 阻止。
问题是这种行为无法重现。它在某些客户端计算机上随机发生。
使 Process.Start() 挂起会发生什么?(Program.Main 用 [STAThread] 标记)
我目前刚刚做了一个解决方法,在它自己的线程中启动 Process.Start(),如果到那时它还没有返回,它会在 5 秒后杀死它。但这对于等待代码返回的用户来说是 5 秒(我不知道我可以将超时设置多低,因为在某些情况下我需要 Process.Start() 上的返回值)。
会不会有杀毒软件干扰?(客户端安装了 Symantec AV)
更新:我假设当我做了
ProcessStartInfo psi = new ProcessStartInfo("ping", "localhost");
psi.UseShellExecute 默认为 FALSE ...这是不正确的。它默认为真。这是正常的吗?