2008-10-07 3 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 Application. – 2008-10-07 15:12:44

1

Если вы перейдете на вкладки «Свойства» для своего проекта в Visual Studio, вы сможете установить тип вывода в приложение Windows. Похоже, на данный момент может быть установлено консольное приложение.

1

Как указано выше, убедитесь, что для свойств вашего проекта установлено приложение Windows вместо консольного приложения. Если это не проблема, то компонент вашего приложения может вручную создать окно консоли с помощью вызова Win32 API AllocConsole(), или вы можете запустить приложение из командной строки в фоновом режиме, не используя UseShellExecute=false; CreateNoWindow=true; в вашем StartInfo.

1

Сделайте резервную копию своего кода, а затем взломайте его, удалив все, что не связано с этой проблемой. Другими словами, у вас есть цикл «удалить код, получить его для сборки, запустить его и посмотреть, будет ли консоль всплывать». В конце концов вы должны либо выявить проблему, либо опубликовать короткую, но полную программу, чтобы мы могли воспроизвести ее и помочь исправить ее.

4

Я нашел его.

Когда проект построен в Visual Studio, проблем нет - нет окна консоли.

Когда проект построен из CruiseControl, это когда мы получаем консольное окно.

Разница? Visual Studio (на основе моего выбора приложения WinForms) добавляет/target: winexe в линию csc.

CruiseControl вызывает серию сценариев NAnt. В сценарии source.build шаг компиляции неверно сконфигурирован и нацелен на exe вместо winexe - эквивалент выбора «Консольное приложение» в VS. Таким образом, консольное окно в релизе строит по сравнению с отладочными сборками.

Соответствующие NAnt:

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

Да, теперь я чувствую себя глупо. :)