应用程序启动时ClickOnce应用程序任务栏中的图标消失

时间:2014-12-12 15:39:25

标签: .net vb.net icons clickonce taskbar

登录ClickOnce应用程序后,任务栏中的图标消失。

一些细节:这个应用程序,我们称之为ThisApp,最初是用.NET 2.0(VB)编写的,并且已经迁移到.NET 4.0但是这个问题一直存在。在Windows 7中(我认为它在Vista和XP中做了同样的事情......)它的行为如下:

当你去开始>所有程序> ThisApp首先启动它,图标出现在任务栏中,应该如此。您首先会看到登录屏幕。如果输入正确的凭据,登录屏幕将替换为应用程序的实际UI,但同时,任务栏中的图标将消失。您仍然可以看到该应用的UI屏幕,但任务栏图标已消失。

此时,如果您碰巧最小化应用程序,除了再次转向>之外,实际上无法将其恢复。所有程序> ThisApp,它会显示“ThisApp的实例已在运行”,但至少在此时它会将图标恢复到任务栏。

如果,在登录后,当图标丢失时,您应该碰巧点击另一个窗口并将ThisApp发送到后台,图标仍然缺失。但是,如果您再单击ThisApp的窗口并将其重新放回到前面,则图标会突然返回到任务栏。

我已经在调试中完成了初始登录过程。我查看了跟踪日志。我查看了Windows事件日志。我花时间在Google上。我找不到关于为什么会发生这种情况的线索。它已经持续了多年,从来没有足够的问题来保证任何开发人员的时间。但现在(终于?)一个足够大的客户抱怨这个,我们需要最终解决这个问题。我发现了很多关于ClickOne应用及其图标的问题,但我找不到解决这一特定问题的问题。

有人见过这样的东西吗?曾经处理过吗?有什么想法吗?

感谢!!!

编辑 - 更多信息:

我仍然对此感到难过。这是我能够弄清楚的:

FIRST:

当应用程序首次启动时,会显示启动页面,同时应用程序检查配置,测试与数据库的连接,加载用户缓存的数据等。当启动页面可见时,图标会显示在任务栏中。初始设置完成后,将隐藏启动页面。此时,任务栏图标消失了。

第二

隐藏启动页面后,初始化并显示登录表单。显示后,图标将再次显示在任务栏中。它保持在那里直到用户验证并且表单关闭,此时图标再次从任务栏消失。

THIRD:

只要关闭登录表单,就会再次显示启动页面,同时完成更多配置并在应用程序(客户端)和服务器之间进行同步。显示启动页面时,任务栏图标将返回。一旦完成同步,就会隐藏启动页面,并且任务栏图标会再次消失。

第四:

只要隐藏了第二个启动页面,我们就会显示主窗体。此时,我希望任务栏图标再次显示。但是......事实并非如此。我一直在比较Login窗体和Main窗体的属性,看它们是否可见,看看我是否能发现任何可能解释为什么一个显示图标而另一个不显示的差异。我没有看到任何明显的东西。

CODE:

下面是创建并加载Login表单的代码的屏幕截图,其中箭头指向表单变为可见的行,图标显示在任务栏中。

code that creates and loads the login form - taskbar icon shows

下面是创建并加载Main表单的代码的屏幕截图,其中箭头指向我将EXP任务栏图标显示的行。表单本身确实出现在此行,但图标不显示。

code that creates and loads the main form - taskbar icon does not show

还有一些事情:

  1. 图标在应用程序的属性中设置
  2. 在两种形式中,ShowIcon和ShowInTaskbar都是真的
  3. 欢迎任何想法!!!

2 个答案:

答案 0 :(得分:0)

嗯,我不知道这里到底发生了什么。但我找到了一个现在必须做的解决方法......

Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Me.Load
    ' For some reason, the icon does not show in the taskbar when this form first shows.  The following is a workaround...
    Visible = False
    Visible = True
    ' End icon workaround
    InitTabs()
End Sub

答案 1 :(得分:0)

您可能没有设置主窗体的属性,告诉它在TaskBar中显示。

在Windows窗体中,属性为ShowInTaskbar。所以你可以从设计者或你的构造函数中设置它,你说Me.ShowInTaskbar = true。

从WinForms到WPF保留了许多窗口概念,因此在System.Windows命名空间中的Window类上以相同的方式命名该属性。

即使您有多个窗口并希望每个顶级窗口都显示在任务栏中,您只需将ShowInTaskbar属性设置为true即可。主窗口是使应用程序保持活动状态的窗口。