具有初始WindowState ==最小化的.NET App,但显示在Vista / Windows7上的taskmgr->应用程序选项卡中但不出现在WinXP上

时间:2009-09-23 14:24:11

标签: .net windows winforms

我有一个Windows窗体应用程序,其中Form1对象的初始WindowState ==最小化。在应用程序确实启动最小化等意义上,这可以正常工作。但是,应用程序显示在taskmgr的应用程序选项卡中,这是不可取的。

我个人只能在Vista上重现这一点。我无法在WinXP或Windows 2003上重现这一点。我的客户说过这确实发生在WinXP sp3上。因此,它可能与安装的.NET框架服务包有关,而不一定是操作系统问题 - 或者他们向我传递了关于winxp的错误信息。

无论具体组合是什么......我都需要修复。

我尝试过:

  • 在我的表单构造函数中,放置this.WindowState==Minimized和this.Hide()。这没有用。 (Form_Load事件处理程序会做什么不同吗?我过去曾遇到过类似的问题,Form_Load似乎从来没有做过与表单构造函数不同的事情,所以我没有尝试过)

解决方法:

  • 我有MinimizeApplication()方法执行this.WindowState=Minimized; this.Hide();,如果在应用程序加载后我单击应用程序SystemTray(aka NotifyIcon)上的上下文菜单快捷方式,调用MinimizeApplication()它从任务管理员那里消失了。
  • 在计时器的DoWork中,我能够调用MinimizeApplication()。但是,这似乎是一个真正的黑客。

请注意:应用程序选项卡和taskmgr上的进程选项卡之间存在差异。我不是想做一些粗略的事情,比如隐藏我的应用程序正在运行的所有证据。

修改1 这就是我实现变通方法的方式。也许它会对这个问题有所了解。

    Timer mMinimizeTimer = null;

    public Form1(string[] args)
    {
        this.WindowState = FormWindowState.Minimized;
        this.Hide();

        mMinimizeTimer = new Timer();
        mMinimizeTimer.Tick += new EventHandler(mMinimizeTimer_Tick);
        mMinimizeTimer.Interval = 500;
        mMinimizeTimer.Enabled = true;
    }

    void mMinimizeTimer_Tick(object sender, EventArgs e)
    {
        // Forces minimize after application starts.  This is a workaround to prevent
        // application from showing up in the taskmanager -> Applications tab on Vista.
        this.Hide();
        mMinimizeTimer.Enabled = false;
    }

5 个答案:

答案 0 :(得分:3)

尝试在ShowInTaskbar = false上设置Form

答案 1 :(得分:3)

您是否尝试过设置Form.ShowInTaskBar = false?

答案 2 :(得分:1)

我想在main方法中,您可以通过调用

来启动表单
Application.Run(new Form1())

尝试这样做:

Form1 frm = new Form1();
Application.Run();

这样,即使在TaskManager应用程序选项卡中,表单也会被实例化,但根本不显示。 (Application.Run将表单作为参数visiblity设置为true)

P.S。:为什么不创建.NET服务而不是.NET WinForm应用程序?

答案 3 :(得分:1)

你需要一个表格来展示吗?

您可以启动应用程序控制器,而不是从表单开始,这可以完成您的工作

您可以查看application.Run()或Application.Run(context)方法来启动您的应用

答案 4 :(得分:0)

我从来没有找到我希望的这个问题的答案。我仍在使用我在上面的问题中概述的解决方法。现在,通过让我的客户将其安装在有问题的PC上进行“现场测试”,到目前为止一直很好。

如果有人有更好的解决方案/解释操作系统/ .NET版本导致此行为,请发布它!