【问题标题】:exe without console window, without visual studioexe没有控制台窗口,没有Visual Studio
【发布时间】:2012-10-11 02:21:37
【问题描述】:

首先,我没有使用 Visual Studio,我使用的是记事本和 csc。我想要做的是像Visual Studio的Windows应用程序一样创建exe,也就是说,当你双击exe时根本不会打开任何控制台窗口。我发现了这个:

[DllImport("kernel32"]
public static extern IntPtr GetConsoleWindow();

IntPtr window = GetConsoleWindow();
if(window != IntPtr.Zero) ShowWindow(window, 0);

和类似的 sn-ps,它们可以工作,但控制台仍然会出现一瞬间。我希望它根本不显示。

另外,使用 Process 类也无济于事,因为 exe 是独立的,需要手动双击,它不是从已经运行的程序中启动的。

我也知道使用 vbs 脚本来启动打开 exe 的 bat 以及其他解决方法,但它们不适合我的需要。

如何编译 exe 以仅在没有任何控制台窗口的情况下打开?这一定是可能的,因为 Visual Studio 的 Windows 应用程序可以做到这一点。澄清一下,我什至不想要一个表单,我只想让程序在后台运行,我只是指 Windows 应用程序来进行比较,因为它们没有显示控制台。

请不要给我任何愚蠢的答案,例如“使用 Visual Studio”,或者回答问题而不是答案。感谢您的帮助!

【问题讨论】:

    标签: console hide exe


    【解决方案1】:

    您可能想要使用非托管库 kernel32.dll 和 FreeConsole 函数。这是一个例子:

    [DllImport("kernel32.dll")]
    static extern bool FreeConsole();
    
    static void Main(string[] args)
    {
        FreeConsole();
        // Do other stuff
    }
    

    如果这就是你要找的,请告诉我!

    【讨论】:

    • 嗨,这似乎与我发布的 sn-p 功能相同,即我尝试过它,控制台窗口在关闭前仍然会出现一会儿。之所以会发生这种情况是有道理的,因为 exe 本身是在该行代码 (FreeConsole) 被命中之前通过控制台加载和启动的。因此,我认为我需要以不同的方式编译 exe,就像 Visual Studio 为 Windows 应用程序所做的那样。你有什么其他的建议吗?
    【解决方案2】:

    你只能走一条路。

    1. 将您(自己的)应用程序创建为 GUI 子系统,而不是 CONSOLE 子系统。
    2. 运行编译器时 - 使用带有 SW_HIDE (CmdShow) 的 CreateProcess 或 ShellExecute (C++)。不记得了,C#函数中是否有相应的参数,认为- 必须。如果没有 - 使用 WinAPI 启动编译器。

    此方法将完全遮盖控制台窗口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-29
      • 1970-01-01
      • 1970-01-01
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      相关资源
      最近更新 更多