如何为生成的快捷方式应用图标?

How to apply an icon for an generated shortcut?

我们在 windows 的开始菜单中创建一个快捷方式,我们要为该快捷方式应用目标文件的图标。目标文件为Help & Manual的帮助文件(后缀为.chm)。我们尝试了以下代码:

var lPath = @"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\ProductName\Help.lnk";
var lTargetPath = @"C:\Program Files\ManufacturerName\ProductName\Help.chm";

WshShell lWshShell = new WshShell();
IWshShortcut lShortcut = (IWshShortcut)lWshShell.CreateShortcut(lPath);
lShortcut.WorkingDirectory = lPath;            
lShortcut.TargetPath = lTargetPath;

lShortcut.IconLocation = lTargetPath; // <-- I want to apply the same icon as the target file here.

目标 .chm 文件具有以下图标:

当我们执行这段代码时,开始菜单中的快捷方式如下所示:

如何自动应用目标文件的图标?

注意:当我使用相同的路径通过 WIX 创建快捷方式时,图标将应用于快捷方式。

我的印象是 Windows 中任何文件的图标都是与默认打开此类文件的程序的 .exe 关联的图标(即文件关联和默认程序).对于快捷方式,默认应该遵循符号链接并显示目标本身具有的任何图标,除非您覆盖它

我的猜测是 lShortcut.IconLocation = lTargetPath; 行将图标设置为无效图标,但 Windows 仍会尝试遵守它并回退到默认值 "blank" 你看到的图标。请注意 .chm 文件本身没有图标,也不是图标。显示的图标只是系统帮助查看器的图标。

我刚刚手动测试了这个。在您的桌面上创建一个 .txt 文件并确认它有一个图标。然后右键单击它并选择 Send To -> Desktop (Create Shortcut) 创建快捷方式。它将具有相同的图标。右键单击快捷方式,选择 Properties,然后选择 Set Icon... 并输入任意路径。按 OK,消除警告,再次按 OK

对我来说,图标从 Notepad++ 的图标(.txt 文件的默认图标)更改为空白文件图标。

当我下次在快捷方式上选择"Set Icon"时,Windows会先提示找不到我之前设置的无效路径,所以这就证明无论你填什么,都是保存在某个地方,不管它是否有效。