【问题标题】:.Net Console Application that Doesn't Bring up a Console不启动控制台的 .Net 控制台应用程序
【发布时间】:2010-10-30 09:53:23
【问题描述】:

我有一个控制台应用程序,用于通过 Windows 调度程序运行计划作业。与应用程序之间的所有通信都在电子邮件、事件记录、数据库日志中。有什么办法可以抑制控制台窗口出现吗?

【问题讨论】:

    标签: c# .net vb.net console console-application


    【解决方案1】:

    当然。将其构建为 winforms 应用程序,从不显示您的表单。

    请小心,因为它不再是真正的控制台应用程序,并且在某些环境中您将无法使用它。

    【讨论】:

    • 有什么方法可以在现有项目中完成,这样我就不必迁移东西了?
    • 右键项目,进入属性,在弹出的窗体中,将其从Console应用改为WinForms应用,关闭,重新编译。
    • 你也可以删除Form类,永远不要实例化它
    • @ChrisDoggett - 感谢您的精彩提示!我不知道您可以如此轻松地在这些项目类型之间切换!
    【解决方案2】:

    为什么不让应用程序成为 Windows 服务?

    【讨论】:

    • 无计划作业!= Windows 服务。除非他使用电子邮件开始处理,在这种情况下,服务是更好的选择。
    • 是的,以前曾走过这条路。我曾经使用服务基础架构创建计划作业,但最终意识到这样做会导致大量不必要的代码和困难的升级。简而言之,它重新创建了任务调度程序免费提供的基础架构!
    • 没关系,但我看不出有理由否决巴达罗的问题。
    【解决方案3】:

    这是一个 hack,但以下博客文章描述了如何隐藏控制台窗口:

    http://expsharing.blogspot.com/2008/03/hideshow-console-window-in-net-black.html

    【讨论】:

    • 非常好的发现。我将在未来的某个时候不止一次地使用它。谢谢菲利普。顺便说一句,如果它不在 .Net 框架中,我不认为调用 user32.dll 是一种黑客行为。这只是“它是如何完成的。”
    【解决方案4】:

    借自 MSDN (link text):

    using System.Runtime.InteropServices;
    
    ...
          [DllImport("user32.dll")]
          public static extern IntPtr FindWindow(string lpClassName,string lpWindowName);
    
          [DllImport("user32.dll")]
          static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
    
    ...
    
             //Sometimes System.Windows.Forms.Application.ExecutablePath works for the caption depending on the system you are running under.
             IntPtr hWnd = FindWindow(null, "Your console windows caption"); //put your console window caption here
             if(hWnd != IntPtr.Zero)
             {
                //Hide the window
                ShowWindow(hWnd, 0); // 0 = SW_HIDE
             }
    
    
             if(hWnd != IntPtr.Zero)
             {
                //Show window again
                ShowWindow(hWnd, 1); //1 = SW_SHOWNORMA
             }
    

    【讨论】:

      【解决方案5】:

      安排任务以与您的帐户不同的用户身份运行,这样您就不会弹出窗口。 . .

      【讨论】:

        【解决方案6】:

        只需将计划任务配置为“无论用户是否登录都运行”。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-05-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多