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

2023-11-21

(有一个非常相似的话题从未得到解决: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(使用前将#替换为@)

Process.Start 在某些客户端上随机阻塞/挂起 的相关文章

  • WinForms:如何确定窗口是否不再活动(没有子窗口具有焦点)?

    我的应用程序使用多个窗口 我想隐藏一个特定窗口 以防应用程序失去焦点 当活动窗口不是应用程序窗口时 source https stackoverflow com questions 466354 how can i tell if a wi
  • 为什么libc++的shared_ptr实现使用完整内存屏障而不是宽松内存屏障?

    在boost的实现中shared ptr 它用放松内存排序以增加其引用计数 https github com boostorg smart ptr blob master include boost smart ptr detail sp
  • 如何在 Android NDK 中创建新的 NativeWindow 而无需 Android 操作系统源代码?

    我想编译一个 Android OpenGL 控制台应用程序 您可以直接从控制台启动 Android x86 运行 或者从 Android x86 GUI 内的 Android 终端应用程序运行 这个帖子 如何在 Android NDK 中创
  • 为什么要序列化对象需要 Serialized 属性

    根据我的理解 SerializedAttribute 不提供编译时检查 因为它都是在运行时完成的 如果是这样 那么为什么需要将类标记为可序列化呢 难道序列化器不能尝试序列化一个对象然后失败吗 这不就是它现在所做的吗 当某些东西被标记时 它会
  • 构造函数中显式关键字的使用

    我试图了解 C 中显式关键字的用法 并查看了这个问题C 中的explicit关键字是什么意思 https stackoverflow com questions 121162 但是 那里列出的示例 实际上是前两个答案 对于用法并不是很清楚
  • 如何使用recv()检测客户端是否仍然连接(并且没有挂起)?

    我写了一个多客户端服务器程序C on SuSE Linux 企业服务器 12 3 x86 64 我为每个客户端使用一个线程来接收数据 我的问题是 我使用一个终端来运行服务器 并使用其他几个终端来运行服务器telnet到我的服务器 作为客户端
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • 如何从 C# 控制器重定向到外部 url

    我使用 C 控制器作为网络服务 在其中我想将用户重定向到外部网址 我该怎么做 Tried System Web HttpContext Current Response Redirect 但没有成功 使用控制器的重定向 http msdn
  • 检查算术运算中的溢出情况[重复]

    这个问题在这里已经有答案了 可能的重复 检测 C C 中整数溢出的最佳方法 https stackoverflow com questions 199333 best way to detect integer overflow in c
  • 在 2D 中将一个点旋转另一个点

    我想知道当一个点相对于另一个点旋转一定角度时如何计算出新的坐标 我有一个块箭头 想要将其相对于箭头底部中间的点旋转角度 theta 这是允许我在两个屏幕控件之间绘制多边形所必需的 我无法使用和旋转图像 从我到目前为止所考虑的情况来看 使问题
  • 将数据打印到文件

    我已经超载了 lt lt 运算符 使其写入文件并写入控制台 我已经为同一个函数创建了 8 个线程 并且我想输出 hello hi 如果我在无限循环中运行这个线程例程 文件中的o p是 hello hi hello hi hello hi e
  • 在 C 中使用 GNU automake 中的解析器

    我是 GNU autotools 的新手 在我的项目中使用了 lex 和 yacc 解析器 将它们作为 makefile am 中的源代码会产生以下错误 配置 in AC CHECK PROGS YACC bison yacc none i
  • 当我“绘制”线条时,如何将点平均分配到 LineRenderer 的宽度曲线?

    我正在使用线条渲染器创建一个 绘图 应用程序 现在我尝试使用线条渲染器上的宽度曲线启用笔压 问题在于 AnimationCurve 的 时间 值 水平轴 从 0 标准化为 1 因此我不能在每次添加位置时都在其末尾添加一个值 除非有一个我不知
  • 获取 2 个数据集 c# 中的差异

    我正在编写一个简短的算法 它必须比较两个数据集 以便可以进一步处理两者之间的差异 我尝试通过合并这两个数据集并将结果更改放入新的数据集来实现此目标 我的方法如下所示 private DataSet ComputateDiff DataSet
  • g++ 对于看似不相关的变量“警告:迭代...调用未定义的行为”

    考虑以下代码strange cpp include
  • 将代码拆分为标头/源文件

    我从 Asio 的示例页面中获取了以下代码 class tcp connection public boost enable shared from this
  • 耐用功能是否适合大量活动?

    我有一个场景 需要计算 500k 活动 都是小算盘 由于限制 我只能同时计算 30 个 想象一下下面的简单示例 FunctionName Crawl public static async Task
  • 双精度类型二维多维数组的 pinvoke 编组作为 c# 和 c++ 之间的输入和输出

    我有以下我正在尝试解决的双物质类型的 2d 多维数组的 c 和 c pinvoke 编组 我已经查看了以下热门内容以获得我目前拥有的内容使用双精度数组进行 P Invoke 在 C 和 C 之间编组数据 https stackoverflo
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop

随机推荐

  • 更改 NSTableViewCell 的颜色

    如何更改 NSTableView 中单元格的颜色 In your NSTableViewDelegate为了NSTableView 实现这个方法 void tableView NSTableView tableView willDispla
  • 使用 OAuth2.0 的客户端凭据流程进行 IMAP 身份验证失败 |爪哇 |在线交流

    我正面临着一个验证失败尝试使用客户端凭据授予流程连接两个 IMAP 协议时出现问题OAuth2 0 在哪里 我一直遵循微软在其分步指南中建议的步骤 即 使用 OAuth 验证 IMAP POP 或 SMTP 连接 我一直在使用这个githu
  • 在请求之间用 spring 维护状态

    我是 Spring 新手 如果这是初学者问题 很抱歉 但手册不清楚 至少对我来说不是 我的问题是 如何在 Spring 的请求之间共享状态 我可以使用 ModelMap 将数据从控制器发送到视图 但是 ModelMap 中的数据不会由视图发
  • 如何在 Eclipse 调试器中后退一步?

    是否可以在 Eclipse 调试器中进行反向执行 我当前正在进行的项目需要至少 5 秒的时间来读取和初始化文件中的数据 然后才能完成任何操作 如果我在调试器中越界 我必须终止程序并重新启动 这需要相当长的时间 您可以使用 Eclipse 的
  • 使用 Javascript 将 XML 转换为 JSON(以及反之)

    如何从 XML 转换为 JSON 然后再转换回 XML 以下工具运行良好 但并不完全一致 xml2json 以前有人遇到过这种情况吗 我认为这是最好的 XML 和 JSON 之间的转换 请务必阅读xml com O Reilly 网站上的随
  • 在“trap EXIT”中获取 shell 脚本的退出代码

    我想在我的 Bash 脚本中进行清理操作 如下所示 bin bash set eu trap echo E failed with exitcode 1 gt 2 ERR true false Using 我认为这是一个自然的选择 但事实并
  • 是否可以在构建过程中动态指定包名称?

    我想同时将调试和发布版本部署到我的设备 如果我在构建之前手动更改清单中的包名称 我可以做到这一点 例如改变
  • 在 Android 中禁用自定义键盘上的一键

    我有定制keyboard在我的 Android 应用程序中 它的布局在 xml 中描述如下
  • 查明 GWT 模块何时加载

    我通过以下方式将 GWT 方法导出到本机 javascript public class FaceBookGalleryEntryPoint implements EntryPoint Override public void onModu
  • 在 fp-ts 中链接一些异步任务,保留每个任务的结果

    在 fp ts 中 我尝试将一些可能失败的异步任务与TaskEither但我需要稍后使用中间任务的结果 在这个例子中 const getFoo a string Promise
  • Windows 10 上的 Laravel 8 和 Laravel Sail for dev 速度很慢。如何加快速度?

    我怎样才能重新创建这个 创建安装自Laravel 8 文档 and Laravel Sail 文档 我用sail up命令 效果很好 该命令构建 docker 容器 连接它们 并使开发变得像我们想象的那样简单 尤其是对于 VSCode 这工
  • 将元素与窗口底部对齐

    我正在尝试使用 jQuery 计算窗口高度 然后将该值应用于 DIV 容器 div 最后我希望 jQuery 将元素与页面底部对齐 div div Here is the element i wish to align to the bot
  • 如何解决重定向循环

    我有一个 Web 应用程序 一些使用 Chrome 作为首选浏览器的用户在注销应用程序并尝试重新登录时收到以下错误 此网页有重定向循环 我的 Web 应用程序使用表单身份验证 并且FormAuthenticationModule将用户重定向
  • 在 HTML 文件中使用 tern_for_vim 插件

    我正在尝试设置tern for vim插件可以在 JavaScript 中实现良好的自动完成功能 在编辑 js 文件时 Ctrl X Ctrl O 给出了很好的语义结果 拾取了 backbone js 和其他库 但是 当我在 HTML 文件
  • 如何以线程安全的方式迭代容器?

    我有一个容器 C 我需要从不同的线程以两种方式进行操作 1 添加和删除元素 2 遍历其成员 显然 在迭代发生时删除元素 灾难 代码看起来像这样 class A public void AddItem const T item int ind
  • Bash 内联命令的 Windows bat 替代品

    是否有任何 Windows 等效语法可以在 bat 脚本文件中的另一个命令中运行一个命令 在Linux中 您可以简单地使用 or 是的 至少对于简单的事情 setlocal enableextensions enabledelayedexp
  • 更改 SCNText 节点对象的颜色或纹理(Swift - Scenekit)

    如何设置 SCNText 对象的纹理 这就是我所拥有的 外观没有任何变化 myNode is a working SCNText element let mat SCNMaterial met diffuse contents UIImag
  • 如何在 Scala 中提前返回[重复]

    这个问题在这里已经有答案了 我现在正在学习Scala 我喜欢做的一件事是尽早返回 我相信这对每个人来说都更容易阅读 因为我们只是删除了之前的无效状态 现在 由于 Scala 是一种函数式语言 而且我读到削减计算是不好的函数式风格 我想知道是
  • 使用Databricks Job api调用databricks笔记本运行-提交端点

    我正在尝试建立一个调用 databricks 笔记本的 AWS lambda 函数 在 s3 触发器的情况下 我知道我必须在 lambda 函数 python 代码中使用 databricks 的 Jobs API 来使用以下命令发出 PO
  • Process.Start 在某些客户端上随机阻塞/挂起

    有一个非常相似的话题从未得到解决 here 我们有一个大型应用程序在多个客户端上运行 但最近我的一些代码停止工作 添加一些调试代码 我发现代码在调用 Process Start 时停止 没有设置 shellexecute true 通话很简