动态设置Windows应用程序任务栏图标

5

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

if (AppBranding.Is("FOO"))
    Icon = MyProject.Properties.Resources.Icon_FOO;
else
    Icon = MyProject.Properties.Resources.Icon_BAR;
Icon_FOOIcon_BAR是指向它们各自的.ico文件的资源。

此外,在Visual Studio中,通过在“项目”>“我的项目属性”>“资源”中设置图标和清单。

enter image description here

当用户启动应用程序时,根据品牌,出现正确的图标。然而,如果他们将程序固定到任务栏,则不管品牌如何,图标都会恢复为Icon_FOO.ico。当他们取消固定时,图标会切换回来。

我认为固定到任务栏的程序使用.exe的图标,而窗口的图标是我设置的Form.Icon。我只知道如何通过转到“项目属性”>“资源”并从下拉列表中进行选择来设置.exe图标,就像上面的图片一样。如何动态设置.exe的图标?

1个回答

1
任务栏中的图标通常是程序集中可用的第一个图标资源,无法从应用程序内部进行修改(除非您通过编程创建自定义快捷方式)。
不要试图操纵它,您可以创建一个具有正确图标和版本属性的简单启动应用程序(*.exe),为每个品牌版本创建一个?然后只需从包含实际应用程序内容的程序集中加载应用程序的 .exe。
Launcher_FOO.exe
Launcher_BAR.exe

使用自定义图标。两个应用程序将创建一个共同的应用程序

Actual_Application.dll

开始应用程序。

您可以使用 Reflection.Emit 动态创建 Launcher_xxx.exe:

请参见 谷歌搜索

请参见 MSDN


我在提问中可能过于简化了示例,以便让StackOverflow更容易阅读。我们的客户会得到一个未品牌的应用程序,他们提供一个包含品牌信息的许可文件,然后所有相关的横幅和图标都会突然改变。你的解决方案要求在编译时知道品牌,但我们只能在运行时知道它。更糟糕的是,我们的解决方案一直很好,直到有人决定将程序固定到任务栏。我需要一种动态的方法来更改任务栏图标。 - Rainbolt
@John,好的,我理解你的需求,但我认为没有动态解决方案,而不改变快捷方式或二进制本身(这将不是一个很好的解决方案,因为病毒扫描器等会检查这种情况)。如果您的应用程序已签名,则无法在重新签名之前修改应用程序。 - oɔɯǝɹ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接