繁体   English   中英

c#如何禁止cmd.exe进程中的“不支持的16位应用程序”窗口弹出

[英]c# how to suppress “Unsupported 16-Bit Application” window popup in cmd.exe process

简短说明:

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

更长的解释:

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

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

当它在服务器上运行时,我需要关闭/抑制该窗口并将错误报告给我的DCL。

我的解决方案:

到目前为止,我唯一能找到的解决方案是检查启动的进程的MainWindowTitle中的“ 不支持的16位应用程序 ”,终止该进程并将错误报告给DCL。

但是不幸的是,由于这是在分离过程中运行的,并且DCL不必等待过程结束,因此未定义标题出现的时间,并且检查可能为时过早而失败。

有任何想法吗?

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

下面的代码行禁用消息框:

var oldMode = SetErrorMode(ErrorModes.SEM_FAILCRITICALERRORS);

下一行将其设置回原始值:

SetErrorMode(oldMode );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM