【问题标题】:Taskbar icon will not change once binary is installed安装二进制文件后,任务栏图标不会改变
【发布时间】:2011-10-30 00:30:03
【问题描述】:

我在 .net 3.5 sp1 中有一个 WPF 应用程序,我会定期更改主窗口图标。在 vs 托管进程下运行时,我看到任务栏图标发生变化,当直接从 bin/Debug 或 bin/Release 文件夹运行时,但在从 \Program Files 安装和运行二进制文件时却没有!窗口的标题栏图标仍然正确更改...

我是这样设置图标的:

Uri imageSource = new Uri("pack://application:,,,/MyProject;component/Images/test.ico");
this.Icon = BitmapFrame.Create(imageSource);

为什么任务栏图标没有变化?

我确实有一个 ApplicationIcon 集。这是任务栏图标显示的内容,而不是更改为我设置的内容。根据msdn,ApplicationIcon 只是一个后备,以防 this.Icon 未设置。

我没有固定任务栏图标。

主窗口不是应用程序的启动窗口。事实上,没有启动窗口。该窗口从系统托盘图标打开。

上面提到的 ApplicationIcon 和 test.ico 的图标都将它们的编译操作设置为 Resource。

WiX 安装程序没有对 exe 或图标执行任何特殊操作。 exe是这样引用的:

<File Id="MyExe" Name="$(var.MyProject.TargetFileName)"
 Source="$(var.MyProject.TargetPath)" KeyPath="yes" Vital="yes" />

我目前正在查看AppUserModelID,看看这是否可以解决这个问题,但似乎没有必要以这种方式覆盖 Windows 7 的默认行为。我有两个由 WiX 创建的快捷方式。一个在开始菜单的程序文件夹中,一个在开始菜单的启动文件夹中。

2011 年 8 月 18 日更新:

好吧,这只是奇怪,奇怪,奇怪。

我开始尝试解决另一个烦恼,即我的窗口在我不希望它时允许任务栏固定(这是默认的 win7 任务栏闪烁)。所以我通过 HKCR\Applications\MyEXEName.exe 下的 regedit 手动设置 IsHostApp REG_BINARY 0000。为了使更改生效,我必须更新引用该应用程序的快捷方式(或者我可以重新安装)。瞧,下次我启动应用程序时,不仅固定功能消失了,而且任务栏图标也正确更新了!!!

有人能解释一下这是如何解决问题的吗?

【问题讨论】:

    标签: c# wpf windows-7 wix icons


    【解决方案1】:

    当 Windows Installer 在开始菜单中创建快捷方式时,它会设置快捷方式的图标,指向安装程序缓存的图标。广告需要此功能,其中引用的文件不存在但仍应显示正确的图标。如果主 .exe 被删除,它还​​允许向应用程序显示正确的图标(并且您可以运行 MSI 修复来修复它)。

    您的应用程序使用启动文件夹中的快捷方式启动,并且在任务栏上使用快捷方式的图标。 (并且您拥有主窗口:无论您如何显示它,应用程序何时启动或仅当您单击通知区域中的应用程序图标时;此外,您必须有一个窗口才能从通知区域图标获得点击。)

    当您禁用将应用固定到任务栏时,它会忽略启动应用的快捷方式中设置的图标,因此当您更改窗口图标时,任务栏上的图标会更新。

    【讨论】:

    • 不,您不需要一个窗口来“从通知区域图标获取点击”。我的代码用完了扩展的 Application 类,并且永远不需要打开窗口来与我的托盘图标交互。任务栏图标仅在主窗口打开时可见,所以我不明白为什么它与快捷方式的图标如此紧密地结合在一起。毕竟我有一个 ApplicationIcon 集。但是,如果我在 3 天内没有听到任何关于为什么设置 IsHostApp 告诉 Windows 听我的 this.Icon 更改的消息,我会接受这个。感谢您的回复!
    • 我试图用“紧密耦合”位说的是,缓存覆盖应用程序试图对其图标执行的操作似乎很奇怪。
    • 哦,另外,我在 msi 中的功能设置为 AllowAdvertise="no",所以我认为这些快捷方式不是广告中的那种。测试确认,如果我删除 installdir 并运行快捷方式,则自我修复不起作用。不知道这是否会改变什么...
    • 我不是说窗口一定要可见,而是要求接收点击通知图标:窗口即使不可见也是存在的。当然,任务栏不会显示用户看不到的窗口的按钮。
    • 快捷方式是否被宣传并不重要。重要的是它有一个与之关联的图标。打开快捷方式属性并单击属性对话框中的更改图标按钮,您将看到该图标不是来自应用程序可执行文件(快捷方式的目标),而是来自安装程序缓存。 Windows 7 任务栏显示图标 关联 与启动应用程序的快捷方式(为了实现固定,任务栏也使用快捷方式)。为了能够动态更改任务栏图标,您必须与任务栏通信。
    猜你喜欢
    • 1970-01-01
    • 2013-12-19
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多