代码之家  ›  专栏  ›  技术社区  ›  jdehaan

启动.NET控制台应用程序时会发生什么?

  •  2
  • jdehaan  · 技术社区  · 15 年前

    当.NET控制台应用程序启动时会发生什么?

    在进程资源管理器中,当启动exe时,我想知道为什么我看不到“cmd.exe”进程作为控制台应用程序的父进程。那么到底显示了什么?

    有没有办法用另一个“默认”控制台窗口替换?我想这意味着修改“控制台子系统”。

    创建GUI应用程序而不是控制台应用程序不是一个选项,因为我没有所有可能工具的来源。

    观察:

    • 对于Mono和Linux,我对这个和我的测试应用程序一点问题也没有!
    • 使用的字体有影响,我找不到适合所有内容的字体(即使安装了Asia Pack)
    • 在注册表中调整(更改字体、大小…) HKEY_CURRENT_USER\Console 具有影响,可以按可执行文件定义。
    2 回复  |  直到 15 年前
        1
  •  3
  •   Richard    15 年前

    在进程资源管理器中,当启动exe时,我想知道为什么我看不到“cmd.exe”进程作为控制台应用程序的父进程。那么到底显示了什么?

    你不需要 cmd.exe 要拥有控制台窗口,任何具有正确头标志的可执行文件都将导致Windows为其创建控制台,或者如果其父进程具有控制台窗口,则连接到其父进程的控制台窗口。

    有没有办法用另一个“默认”控制台窗口替换?

    仅通过:

    • 将应用程序的编译器标志更改为GUI应用程序,然后使用Win32 API AllocConsole 创建控制台。(出于完整性考虑,如果无法重新生成可执行文件,则此处不适用)。
    • 创建一个中间程序 不是 然后启动程序的控制台应用程序(因此与其父控制台没有关联)。
    • 创建一个中间程序 一个控制台应用程序(因此不与其父控制台关联),然后用 CREATE_NEW_CONSOLE 传递给的标志 CreateProcess .

    Editbin.exe 可以更改标志( editbin /subsystem:WINDOWS ,但应用程序随后需要调用 分配合并 .

    目前还不清楚 CreateNoWindow 的属性 ProcessStartInfo 功能相同 Process.Start 在.NET中。如果这样的话,这个中介可以用.NET编写,但是在这样一个必须加载.NET的短程序中,本机解决方案的重量要轻得多。

        2
  •  2
  •   Martin Liversage    15 年前

    尝试设置 Console.OutputEncoding 属性。

    Console.OutputEncoding = Encoding.UTF8;
    

    这将有效地调用win32本机 SetConsoleOutputCP function 将控制台代码页设置为 CodePage 指定编码的属性。

    推荐文章