(有一个非常类似的主题从未得到解决:here)
我们在几个客户端上运行了一个大应用程序,但最近我的一些代码停止了工作。添加一些调试代码我发现代码在调用Process.Start()时停止(没有设置shellexecute = true)。
通话很简单
Process.Start(new ProcessStartInfo("program"))
在BackgroundWorker线程中。
“程序”应用程序执行它应该执行的操作并退出。
我们的应用程序继续,因为线程在后台,但如果应用程序在GUI线程上运行另一个Process.Start,则应用程序会锁定。如果使用X按钮关闭应用程序,则应用程序仍显示在taskmanager中,因为该线程仍被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。这是正常的吗?
答案 0 :(得分:8)
我理解这个帖子有点陈旧,但如果有人感兴趣,这是由shell扩展(在这种情况下是防病毒软件)引起的。基本上,当您使用UseShellExecute = true(默认)时,防病毒软件会干扰Processor.Start并使其挂起(似乎是随机的)。有趣的是,这个过程开始很好,它是挂起的调用者线程。
我们遇到了与我们客户服务器中启用的Symantec病毒防护相同的问题。我们通过在防病毒软件上设置例外来修复它。或者,您可以禁用UseShellExecute。
答案 1 :(得分:1)