.NET控制台应用程序启动时到底发生了什么?
在进程资源管理器中,启动exe时我想知道为什么我看不到“cmd.exe”进程作为控制台应用程序的父进程。究竟是什么显示出来?
有没有办法用另一个替换“默认”控制台窗口?我想这意味着修改“控制台子系统”。
创建GUI应用程序而不是控制台应用程序不是一种选择,因为我没有所有可能工具的来源。
观察:
HKEY_CURRENT_USER\Console
的注册表中调整(更改字体,大小,...)正在产生影响,可以根据可执行文件进行定义。答案 0 :(得分:3)
在进程资源管理器中,启动exe时我想知道为什么我看不到“cmd.exe”进程作为控制台应用程序的父进程。究竟是什么显示出来?
您不需要cmd.exe
拥有控制台窗口,任何具有正确标头标记的可执行文件都将导致Windows为其创建控制台,或者如果其父级具有父级进程,则连接到其父进程的控制台窗口之一。
有没有办法用另一个替换“默认”控制台窗口?
仅限:
AllocConsole
创建控制台。 (如果您无法重建可执行文件,则包含完整性,不适用于此处。) 1 CREATE_NEW_CONSOLE
标记传递给CreateProcess
。< SUP> 2 1 Editbin.exe
可以更改标记(editbin /subsystem:WINDOWS
),但应用程序需要调用AllocConsole
。
2 目前尚不清楚CreateNoWindow
的ProcessStartInfo
属性是否在.NET中为Process.Start
提供相同的功能。如果确实如此,那么这个中介可以用.NET编写,但是本机解决方案的重量会相当轻 - 在这样一个不得不加载.NET的短程序中,这会显着减慢速度。
答案 1 :(得分:2)
尝试设置Console.OutputEncoding属性。
Console.OutputEncoding = Encoding.UTF8;
这将有效地调用Win32本机SetConsoleOutputCP function将控制台代码页设置为指定编码的CodePage
属性。