Окно консоли отображается при запуске WinForm (C #) - PullRequest
4 голосов
/ 07 октября 2008

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

У меня есть приложение 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();
        }
    }
}

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

Ответы [ 5 ]

4 голосов
/ 07 октября 2008

Я нашел это.

Когда проект собран в 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>

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

4 голосов
/ 07 октября 2008

Мое первое предположение - дважды проверить настройки свойств проекта и убедиться, что тип вывода - «Приложение Windows», а не «Консольное приложение».

1 голос
/ 07 октября 2008

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

1 голос
/ 07 октября 2008

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

1 голос
/ 07 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...