【问题标题】:Dynamically Set Taskbar Icon for Windows Application为 Windows 应用程序动态设置任务栏图标
【发布时间】:2014-02-17 17:20:58
【问题描述】:

我的公司有一种品牌机制,可以为 Windows 应用程序设置图标,如下所示:

if (AppBranding.Is("FOO"))
    Icon = MyProject.Properties.Resources.Icon_FOO;
else
    Icon = MyProject.Properties.Resources.Icon_BAR;

Icon_FOOIcon_BAR 是指向其各自 .ico 文件的资源。

此外,在 Visual Studio 中设置了 Project > MyProject Properties > Resources 中的图标和清单。

当用户启动应用程序时,会根据品牌显示正确的图标。但是,如果他们将程序固定到任务栏,则无论品牌如何,图标都会恢复为 Icon_FOO.ico。当他们取消固定时,图标会切换回来。

我相信固定到任务栏的程序使用 .exe 的图标,而 Window 的图标是我设置的 Form.Icon。我只知道如何通过转到项目属性 > 资源并从下拉列表中进行选择来设置 .exe 图标,如上图所示。如何动态设置.exe的图标?

【问题讨论】:

    标签: c# .net windows-applications


    【解决方案1】:

    任务栏中的图标(通常)是程序集中可用的第一个图标资源,不能从应用程序中修改(除非您以编程方式创建自定义快捷方式)。

    您可以为每个品牌版本创建一个具有正确图标和版本属性的简单启动应用程序 (*.exe),而不是试图操纵它? .exe 只需要从包含实际应用程序内容的程序集中加载应用程序。

    所以你有

    Launcher_FOO.exe
    Launcher_BAR.exe
    

    带有自己的自定义图标。两个应用程序都将从

    创建一个通用应用程序
    Actual_Application.dll
    

    启动应用程序。

    您可以使用Reflection.Emit 即时创建 Launcher_xxx.exe:

    google search

    msdn

    【讨论】:

    • 我可能在试图让 StackOverflow 更容易阅读的同时过度简化了我在问题中的示例。我们的客户获得了一个无品牌的应用程序。他们提供了一个包含品牌的许可证文件,突然所有相关的横幅和图标都发生了变化。您的解决方案要求在编译时知道品牌,而我们只能在运行时知道它。最重要的是,在有人决定将程序固定到任务栏之前,我们的解决方案运行良好。我需要一种动态方式来改变任务栏图标。
    • @John,好的,我了解您的要求,但我认为没有动态解决方案,无需更改快捷方式或二进制文件本身(这不是一个很好的解决方案,给定病毒扫描程序等。检查这种事情)。如果您的应用程序已签名,那么您不能在不辞职的情况下修改应用程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 2012-09-08
    • 2021-08-08
    • 2011-02-12
    • 1970-01-01
    相关资源
    最近更新 更多