如果程序显示对话框,则终止程序(在 CruiseControl.net 下运行的 devenv.com)

Posted

技术标签:

【中文标题】如果程序显示对话框,则终止程序(在 CruiseControl.net 下运行的 devenv.com)【英文标题】:Killing a program if it displays a dialog box (devenv.com running under CruiseControl.net) 【发布时间】:2010-03-04 15:20:09 【问题描述】:

我有 CruiseControl.net 运行 Visual Studio (2005/2008 - 使用 devenv.com),因为我们需要构建部署项目 (.vdproj)。

有时,由于各种原因,devenv 决定即使它是从命令行运行的,使用 devenv.com 变体,它仍然想建立一个对话框。

现在,由于它在远程服务器上的 CruiseControl.net 下运行,这是从未见过的,唯一的症状是构建最终会超时。当构建仍在进行时,查看任务会显示 devenv 正在运行但不消耗任何处理器功率。

是否有一个方便的实用程序可以通过它运行 devenv.com,它基本上会监视它启动的程序,如果它敢于显示任何类型的对话框,基本上就会杀死它?

【问题讨论】:

【参考方案1】:

它提出了什么样的对话框,为什么?您可以编写一个应用程序来关闭对话框,但这并不容易——您需要使用 CBT Hooks 之类的东西。

【讨论】:

我们使用 ClearCase 进行版本控制 - 它存在一些问题,包括无法在不在各个位置引入随机字符的情况下合并 .vdproj 文件。随机损坏的 .vdproj 文件会弹出对话框。我现在已经解决了这个问题——它提出了关于源代码控制不匹配的对话框(我们故意在构建服务器上没有 ClearCase),但得到了这些。只是 .vdproj 文件损坏问题 - 我有一个更长期的方法来解决这个问题 - 专门为他们编写一个合并管理器,但这不是一个快速而简单的工作。 您可能不需要 CBT 挂钩。您也许可以编写一个简单的 .net EXE,它使用像 White 这样的 UI 测试框架来查找具有已知标题/名称的窗口并将其关闭。 white.codeplex.com

以上是关于如果程序显示对话框,则终止程序(在 CruiseControl.net 下运行的 devenv.com)的主要内容,如果未能解决你的问题,请参考以下文章

在片段活动中显示自定义对话框

如果应用程序终止后从通知正文启动应用程序,则打开弹出窗口

如果蓝牙关闭 iOS,则禁用警告对话框

Yii2 - 触发后从事件处理程序终止应用程序

Facebook SDK 3.2 登录仅在应用程序未终止时才有效

如果应用程序从后台终止,则不会收到 Pushkit 通知