2008-10-07 152 views
4

這是一個小問題(坦率地說,我願意爲了上線的目的而生活在一起),但我想知道是否有其他人有想法解決它。在WinForm啓動時(C#)控制檯窗口顯示

我有一個C#WinForms應用程序。當通過可執行文件啓動應用程序(不通過調試器)時,用戶首先看到的是控制檯窗口,後面是主窗口(預加載完成後)。

我不想顯示控制檯窗口。 (就像我說的,這是一個小錯誤。)

項目輸出已經設置爲Windows應用程序。

下面是Main()方法的代碼(大部分)。我已經剔除了各種專有/安全相關的東西,並在適當的地方替換爲註釋。

[STAThread] 
static void Main() 
{ 
    try 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 

     // SNIP: Get username from Windows, associate with DB user 

     if (user == null || user.UID == 0 || (user.Active.HasValue && !(user.Active.Value))) 
     { 
      MessageBox.Show(ErrorStrings.UnknownUser, ErrorStrings.TitleBar, MessageBoxButtons.OK, 
       MessageBoxIcon.Error); 
      Application.Exit(); 
      return; 
     } 

     // SNIP: Associate user with employee object  

     Application.Run(new MainForm()); 
    } 
    catch (Exception ex) 
    { 
     if (ExceptionPolicy.HandleException(ex, UiStrings.ExceptionPolicy)) 
     { 
      string message = ErrorStrings.UnhandledPreface + ex.ToString(); 
      MessageBox.Show(message, ErrorStrings.TitleBar, MessageBoxButtons.OK, MessageBoxIcon.Error); 
      Application.Exit(); 
     } 
    } 
} 

任何人有什麼想法?

回答

4

我的第一個猜測是要仔細檢查您的項目屬性設置,並確保輸出類型是Windows應用程序而不是控制檯應用程序。

+0

好想法;我愚蠢地沒有首先檢查。但是...不,輸出確實是Windows應用程序。 – 2008-10-07 15:12:44

1

如果您在Visual Studio中導航到項目的「屬性」選項卡,則應該能夠將輸出類型設置爲Windows應用程序。這聽起來像它可能被設置爲控制檯應用程序目前。

1

如上所述,請檢查以確保您的項目屬性設置爲Windows應用程序而不是控制檯應用程序。如果這不是問題,那麼應用程序的某個組件可能會使用Win32 API調用AllocConsole()手動創建控制檯窗口,或者您可能在後臺啓動命令行應用程序,而不在StartInfo中使用UseShellExecute=false; CreateNoWindow=true;

1

對您的代碼進行備份,然後對其進行破解,刪除與此問題無關的所有內容。換句話說,有一個「刪除代碼,建立它,運行它並查看控制檯是否仍然彈出」的循環。最終,您最終應該發現問題或能夠發佈一個簡短但完整的程序,以便我們可以重現並幫助解決問題。

4

我找到了。

當在Visual Studio中構建項目時,沒有問題 - 沒有控制檯窗口。

當從CruiseControl構建項目時,這就是我們獲取控制檯窗口的時間。

區別? Visual Studio(基於我選擇的WinForms應用程序)正在將/ target:winexe附加到csc行。

CruiseControl調用一系列NAnt腳本。在source.build腳本中,編譯步驟配置錯誤,並且針對exe而不是winexe - 相當於在VS中選擇「Console App」。因此,發佈版本上的控制檯窗口與調試版本相比較。

相關楠:

<csc output="${build.outputPath}\[myapp].exe" target="winexe" debug="Full" rebuild="true"> 
    <!-- lots of references, sources and resources --> 
</csc> 

是啊,現在我覺得愚蠢。 :)