2012-10-11 59 views
1

首先,我不使用visual studio,我使用记事本和csc。我想要做的是创建类似于Visual Studio的Windows应用程序的exe,也就是说,当您双击exe时,根本不会打开任何控制台窗口。我发现这个:exe无需控制台窗口,没有视觉工作室

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

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

和类似的片段,它的工作,但控制台仍然显示一瞬间。我希望它根本不会出现。

而且,使用过程类没有帮助,因为这个exe是独立的,是用手工进行双击,它不会从已经运行的程序发布。

我也知道用VBS脚本来启动打开的exe文件,和其他的变通办法蝙蝠,但它们不适合我的需要。

我怎么编译exe文件,而无需在所有任何控制台窗口打开仅仅?这一定是可能的,因为Visual Studio的Windows应用程序可以做到这一点。为了说明我甚至不需要表单,我只是希望程序在后台运行,为了比较起见,我只是指Windows应用程序,因为它们没有显示控制台。

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

回答

0

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

[DllImport("kernel32.dll")] 
static extern bool FreeConsole(); 

static void Main(string[] args) 
{ 
    FreeConsole(); 
    // Do other stuff 
} 

让我知道这是你在找什么!

+0

嗨,这似乎是在功能上等同于我张贴的代码段,即我尝试过了,在控制台窗口仍然出现了一会儿关闭之前。这是有道理的,因为这个exe本身是在加载和启动控制台之前,在该行代码(FreeConsole)被击中之前发生的。因此,我相信我需要以不同的方式编译exe,这是Visual Studio为Windows应用程序所做的。你有什么其他建议可以做到吗? – CSharper

0

你只能走一条路。

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

这种方法将完全隐藏控制台窗口。