c#如何抑制"不支持的16位应用程序" cmd.exe进程中的窗口弹出窗口

时间:2017-02-02 13:46:25

标签: c# cmd

简短说明:

使用不正确的exe或com文件作为参数从C#启动cmd.exe进程会打开" 不支持的16位应用程序"窗口。 知道如何检测/禁止此窗口并向调用者报告错误吗?

更长的解释:

在将我们的服务器应用程序从VMS移植到.NET时,我编写了一个VMS / DCL命令解释器,因为我们需要支持DCL命令脚本,我们不允许触及支持DCL脚本的业务层。 DCL解释器现在还需要调用本机程序和 cmd.exe scipts。

为此,我的DCL口译员支持" DCL"在隐藏窗口中启动 cmd.exe 进程的命令,重定向输入/输出和/或将DCL参数作为脚本传递给 cmd.exe 。 现在,当一个错误的脚本文件被传递时(例如带有" .COM"扩展名的DCL命令文件), cmd.exe 尝试启动文件/程序并启动模态" 不支持的16位应用程序"窗口和这个,无论WindowStyle和CreateNoWindow。

由于这在服务器上运行,我需要关闭/禁止窗口并将错误报告给我的DCL。

我的解决方案:

我能找到的唯一解决方案是检查已启动进程的MainWindowTitle" 不支持的16位应用程序",终止进程并报告错误到DCL。

但不幸的是,由于这是在一个分离过程中运行而且DCL不一定需要等待该过程结束,因此没有定义标题显示在哪一点并且检查可能太早而且失败。 / p>

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

SetErrorMode实际上是解决方案,它甚至是一个记录的errorMode。

以下代码行会禁用消息框:

var oldMode = SetErrorMode(ErrorModes.SEM_FAILCRITICALERRORS);

以下行将其重新设置为原始值:

SetErrorMode(oldMode );