我有一个在系统启动时运行的应用程序(目标是.Net Framework2.0),并且我正在尝试显示一个NotifyIcon。
当我的程序启动时,当用户正常运行它时,或者在系统登录后作为子进程启动时,一切都是正常的。
如果我的应用程序在系统使用POSReady2009执行AutoLogon时启动(基本上是使用单用户集的XP )。则NotifyIcon永远不会变为活动状态。
如果你随后在任何时候检查(在计时器中)图标的.Visible,它总是报告它是可见的=真。
如果禁用SSDPSrv并重新启动计算机,图标将正确显示。我怀疑这与安装在.Net 2系统上的.Net 3.5sp1有关。
是否有一些我应该遵循的流程,以确保我的NotifyIcon始终可供用户使用。
我已经设置了RegisterWindowMessage("TaskbarCreated"),但我没有收到这条消息调用,除非您强制终止Explorer.exe并重新启动它。尽管如此,NotifyIcon还是会在内部注册这些通知,所以不应该需要它。
我很高兴停止我的程序的启动,但一旦程序启动,我希望图标正确显示。
如果有一篇知识库文章,我找不到详细介绍这一点,我也会很高兴。
发布于 2010-02-22 11:19:42
好吧,这有点傻,但我有个endedup需要修改启动过程来处理这个问题。
使程序成为自己的快捷方式,get被我们的安装程序放在Startup文件夹中。
触发它的程序不再自动启动它。相反,一旦我们启动(删除一个触发器文件),我们就通知另一个程序。
然后,另一个程序监视用户是否关闭了我们,或者我们只是崩溃并自动重新打开程序。如果您希望完全关闭系统,可以遵循适当的流程
在程序启动过程中,我们检查SSDP服务是否可用以及是否未设置为Disabled。如果是,请等待此服务启动。然后我们检查SQLServer是否正在运行。
然后我们准备好NotifyIcon并将其设置为.visible= true,一切正常。
我仍然保留了RegisterWindowMessage以防用户以某种方式杀死windows资源管理器。
发布于 2010-02-17 22:33:34
嗯..。这很奇怪。
这可能不起作用,而且这可能不是最好的方法-但首先尝试将NotifyIcon1.Visible = True放入Load事件中。
如果这不起作用,为什么不尝试将此添加到计时器中...
NotifyIcon1.Visible = False
NotifyIcon1.Visible = True这应该会在每次计时器滴答的时候隐藏和显示图标,至少这样你就可以看到它是否工作了。也许只运行计时器10次,然后它就结束了,这样脚本就应该隐藏和显示图标10次,此时系统应该准备好了。
让我知道这是否有效-如果不能,我将有一个刮胡子的时刻,并有另一个想法!
https://stackoverflow.com/questions/2264473
复制相似问题