启动.NET控制台应用程序时会发生什么情况?
.NET控制台应用程序启动时发生了什么?启动.NET控制台应用程序时会发生什么情况?
在进程资源管理器中,当启动exe时,我想知道为什么我看不到“cmd.exe”进程作为控制台应用程序的父进程。那么显示的是什么?
有没有办法替换另一个“默认”控制台窗口?我想这意味着修改“控制台子系统”。
创建GUI应用程序而不是控制台应用程序不是一个选项,因为我没有所有可能的工具的来源。
观察:
- 使用Mono和Linux,我在所有这方面,我的测试应用程序没有问题!
- 使用的字体有一个影响,我无法找到一个字体,适合一切(即使安装了亚洲组)在注册表
HKEY_CURRENT_USER\Console
- 扭捏(更改字体,大小,...)是具有影响力和能按可执行文件定义。
在这个过程中探险,在开始的时候EXE我很奇怪,为什么我不能看到一个“cmd.exe的”过程作为控制台应用程序父进程。那么显示的是什么?
你不需要cmd.exe
有一个控制台窗口中,用正确的头标志的任何可执行程序将导致Windows来创建一个控制台,或连接到它的父进程的控制台窗口,如果它的父有一。
有没有办法将另一个“默认”控制台窗口替换?
只有:
- 改变编译标志为您的应用程序是一个GUI应用程序,然后使用Win32 API
AllocConsole
创建一个控制台。 (包括完整性,如果你不能重建可执行文件,将不会在这里适用)。 - 创建一个中间程序不是控制台应用程序(因此不与其父控制台关联)然后启动您的程序。
- 创建一个中间程序为控制台应用程序(因此不与其父控制台关联),然后启动程序,并将
CREATE_NEW_CONSOLE
标志传递给CreateProcess
。
Editbin.exe
可以更改标志(editbin /subsystem:WINDOWS
),但随后的应用程序将需要调用AllocConsole
。
目前尚不清楚如果ProcessStartInfo
的CreateNoWindow
属性在.NET Process.Start
提供相同的功能。如果是这样的话,这个中介可以用.NET编写,但是一个本地解决方案的重量要轻很多,在这么短的程序中加载.NET会显着减慢速度。
谢谢,现在我明白魔法是如何完成的。我一直认为它是内置于应用程序中的东西。这使得系统范围的cmd.exe(理论上至少)成为可能。 – jdehaan 2010-09-27 06:41:04
尝试设置Console.OutputEncoding属性。
Console.OutputEncoding = Encoding.UTF8;
这将有效地调用Win32本地SetConsoleOutputCP function控制台代码页设置为指定编码的CodePage
财产。
此答案中的任何东西有用吗? http://stackoverflow.com/questions/1259084/what-encoding-code-page-is-cmd-exe-using/1259468#1259468 – 2010-09-24 09:15:38