![](/img/trans.png)
[英]How to close cmd.exe window while its being ran as a process in a background worker C#?
[英]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.