Окно консоли отображается при запуске WinForm (C#)

#c# #.net #winforms

Вопрос:

Это незначительная ошибка (та, с которой я готов жить в интересах go-live, честно говоря), но мне интересно, есть ли у кого-нибудь еще идеи, чтобы ее исправить.

У меня есть приложение WinForms на C#. Когда приложение запускается через исполняемый файл (не через отладчик), первое, что видит пользователь, — это окно консоли, за которым следует главное окно (после завершения предварительной загрузки).

Я хотел бы не отображать окно консоли. (Как я уже сказал, это незначительная ошибка.)

Вывод проекта уже настроен на приложение 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 amp;amp; !(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();
        }
    }
}
 

У кого — нибудь есть какие-нибудь идеи?

Ответ №1:

Мое первое предположение состояло бы в том, чтобы дважды проверить настройки свойств вашего проекта и убедиться, что тип вывода-приложение Windows, а не консольное приложение.

Комментарии:

1. Хорошая мысль; и я по глупости не проверил это первым. Однако… Нет, вывод действительно является приложением Windows.

2. Выводом было приложение Windows в VS; но не при компиляции raw. Это ближе всего к правильному ответу.

Ответ №2:

Я нашел его.

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

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

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

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

Соответствующий НАнт:

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

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

Ответ №3:

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

Ответ №4:

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

Ответ №5:

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