简短说明:
使用不正确的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>
有什么想法吗?
答案 0 :(得分:0)
SetErrorMode实际上是解决方案,它甚至是一个记录的errorMode。
以下代码行会禁用消息框:
var oldMode = SetErrorMode(ErrorModes.SEM_FAILCRITICALERRORS);
以下行将其重新设置为原始值:
SetErrorMode(oldMode );