gpt4 book ai didi

c# - Process.Start 在某些客户端上随机阻塞/挂起

转载 作者:太空狗 更新时间:2023-10-29 20:14:47 28 4
gpt4 key购买 nike

(有一个非常相似的主题从未解决: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 并使其挂起(似乎是随机的)。有趣的是,进程启动得很好,挂起的是调用者线程。

我们在其中一个客户的服务器中启用了 Symantec 病毒防护时遇到了同样的问题。我们通过在防病毒软件上设置异常(exception)来修复它。或者,您可以禁用 UseShellExecute。

关于c# - Process.Start 在某些客户端上随机阻塞/挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5702340/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com