#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:
Сделайте резервную копию своего кода, а затем взломайте его, удалив все, что не имеет отношения к этой проблеме. Другими словами, выполните цикл «удалите код, запустите его для сборки, запустите и посмотрите, появится ли консоль». в конечном итоге вы должны либо обнаружить проблему, либо опубликовать короткую, но полную программу, чтобы мы могли воспроизвести ее и помочь исправить.