WinForm启动时显示控制台窗口(C#)

时间:2008-10-07 15:05:30

标签: c# .net winforms

这是一个小错误(我愿意为了上线的利益而坦白地生活),但我想知道是否有其他人有想法来修复它。

我有一个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 个答案:

答案 0 :(得分:4)

我的第一个猜测是仔细检查您的项目属性设置,并确保输出类型是Windows应用程序而不是控制台应用程序。

答案 1 :(得分:4)

我找到了。

在Visual Studio中构建项目时,没有问题 - 没有控制台窗口。

当项目是从CruiseControl构建的时候,那就是我们得到一个控制台窗口。

区别? Visual Studio(根据我选择的WinForms应用程序)将/ target:winexe追加到csc行。

CruiseControl调用一系列NAnt脚本。在source.build脚本中,编译步骤配置错误,并且目标是exe而不是winexe - 相当于在VS中选择“Console App”。因此,发布版本与调试版本的控制台窗口。

相关的NAnt:

<csc output="${build.outputPath}\[myapp].exe" target="winexe" debug="Full" rebuild="true">
    <!-- lots of references, sources and resources -->
</csc>
是的,现在我感到愚蠢。 :)

答案 2 :(得分:1)

如果在Visual Studio中导航到项目的“属性”选项卡,则应该能够将输出类型设置为Windows应用程序。听起来它当前可能设置为控制台应用程序。

答案 3 :(得分:1)

如上所述,请检查以确保项目的属性设置为Windows应用程序而不是控制台应用程序。如果这不是问题,那么应用程序的组件可能是使用Win32 API调用AllocConsole()手动创建控制台窗口,或者您可能在后台启动命令行应用程序而不使用UseShellExecute=false; CreateNoWindow=true;在你的StartInfo中。

答案 4 :(得分:1)

备份您的代码,然后破解它,删除与此问题无关的所有内容。换句话说,有一个“删除代码,让它构建,运行它,看看控制台是否仍然弹出”的循环。最终你应该发现问题,或者发布一个简短但完整的程序,以便我们可以重现它并帮助修复它。