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

时间:2018-01-19 11:03:36

标签: c# shortcut startmenu

我们在Windows的开始菜单中创建一个快捷方式,对于该快捷方式,我们要应用目标文件的图标。目标文件是Help& amp;帮助文件的帮助文件。手动(后缀是.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文件包含以下图标:

enter image description here

执行此代码时,开始菜单中的快捷方式如下所示:

enter image description here

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

当我下次在快捷方式上选择“设置图标”时,Windows将首先显示一条警告,指出我之前设置的无效路径无法找到,所以这证明无论你填写什么,都保存在某处,无论是否是有效的。