【发布时间】:2011-05-22 07:02:02
【问题描述】:
我正在 C# .NET 中启动一个进程,由于某种原因,它在最初启动时会打开一个消息框。我需要从我的应用程序中找到某种方法来阻止此消息框被打开,或者基本上从我的代码中“单击”消息框上的“确定”按钮。
当我们将消息框作为服务运行时,消息框会导致进程挂起,因此我现在需要找到某种方法来阻止该框永远打开或直接从我的代码中关闭它(选择确定)。
我一直在查看一些 Win32 API 示例,但我以前从未使用过它,它看起来有点奇怪。任何建议都会很棒!
编辑
这里提供了一个批处理文件,作为解决该问题的方法。但是,如果可能的话,我更希望它运行一个可执行文件。解释是使用 -supw 参数(在服务器上设置密码)会导致此消息框弹出。这个批处理文件已经过测试并且可以工作,但它需要您创建一个重复的可执行文件 (murmur2.exe),它是 ghetto。
set /p VAR= < superadmin.txt
start murmur2.exe -supw %var%
ping 0.0.0.0 -n 3 > NUL
tskill murmur2
murmur.exe
【问题讨论】:
-
我假设您生成的应用无法更改?
-
并非如此。它是开源的,但它有一个圣经长度的依赖项列表。
-
它显然不是为从服务运行而设计的。您需要将您的应用程序从服务更改为用户模式应用程序。服务无法显示 UI,当服务尝试显示消息框时,它会崩溃。
-
@Cody 我在想象吗?我确定我记得默认选项被采用...也许那是一个特定的上下文。
-
@Marc:我相信如果你用
MB_SERVICE_NOTIFICATION标志调用MessageBox,你就会得到向后兼容的黑客攻击。如果此处调用的应用程序并非设计为从服务运行,即使在早期版本的 Windows 下,也不太可能指定该标志。我不确定没有它会发生什么,但我绝对记得看到报告说它会挂起进程。
标签: c# .net winapi windows-services process