2012-10-11 106 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啓動編譯器。

這種方法將完全隱藏控制檯窗口。