(有一个非常相似的话题从未得到解决:here)
我们有一个大型应用程序在多个客户端上运行,但最近我的一些代码停止工作。添加一些调试代码,我发现代码在调用 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...这是不正确的。它默认为 TRUE。这是正常的吗?
我知道这个线程有点旧,但如果有人感兴趣,这是由 shell 扩展(在本例中为防病毒软件)引起的。基本上,当您以 UseShellExecute=true(默认)启动时,防病毒软件会干扰 Processor.Start 并使其挂起(似乎是随机的)。有趣的是,该进程启动得很好,只是调用者线程挂起。
我们在客户的一台服务器上启用赛门铁克病毒防护时遇到了同样的问题。我们通过在防病毒软件上设置例外来修复它。或者,您可以禁用 UseShellExecute。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)