【问题标题】:Console window displays at WinForm startup (C#)WinForm 启动时显示控制台窗口 (C#)
【发布时间】:2008-10-07 15:05:29
【问题描述】:

这是一个小错误(坦率地说,为了上线,我愿意与之共存),但我想知道是否有其他人有解决它的想法。

我有一个 C# WinForms 应用程序。当应用程序通过可执行文件(而不是调试器)启动时,用户首先看到的是控制台窗口,然后是主窗口(预加载完成后)。

我不想显示控制台窗口。 (就像我说的,这是一个小错误。)

项目输出已设置为 Windows 应用程序。

这是 Main() 方法的(大部分)代码。我已经剪掉了各种专有/安全相关的东西,在适当的地方用 cmets 替换它。

[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();
        }
    }
}

有人有什么想法吗?

【问题讨论】:

    标签: c# .net winforms


    【解决方案1】:

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

    【讨论】:

    • 好主意;我愚蠢地没有先检查。但是……不,输出确实是 Windows 应用程序。
    • 输出是 VS 中的 Windows 应用程序;但不是在原始编译时。这是最接近正确答案的。
    【解决方案2】:

    我找到了。

    在 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>
    

    是的,现在我觉得自己很笨。 :)

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 2010-10-28
            • 1970-01-01
            • 2011-04-04
            • 2017-07-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-30
            • 2011-07-05
            相关资源
            最近更新 更多