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

C# 如何为生成的快捷方式应用图标?,c#,shortcut,startmenu,C#,Shortcut,Startmenu,我们在windows的“开始”菜单中创建一个快捷方式,并希望为该快捷方式应用目标文件的图标。目标文件是帮助和手册的帮助文件(后缀为.chm)。我们尝试了以下代码: var lPath = @"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\ProductName\Help.lnk"; var lTargetPath = @"C:\Program Files\ManufacturerName\ProductName\Help.chm";

我们在windows的“开始”菜单中创建一个快捷方式,并希望为该快捷方式应用目标文件的图标。目标文件是帮助和手册的帮助文件(后缀为.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.
var lPath=@“C:\ProgramData\Microsoft\Windows\Start Menu\Programs\ProductName\Help.lnk”;
var lTargetPath=@“C:\Program Files\ManufacturerName\ProductName\Help.chm”;
WshShell lWshShell=新的WshShell();
IWshShortcut lShortcut=(IWshShortcut)lWshShell.CreateShortcut(lPath);
lShortcut.WorkingDirectory=lPath;
lShortcut.TargetPath=lTargetPath;

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

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

我只是手动测试了一下。在桌面上创建一个
.txt
文件,并验证它是否有图标。然后右键单击它并选择
发送到->桌面(创建快捷方式)
创建快捷方式。它将具有相同的图标。右键单击快捷方式,选择
属性
,然后选择
设置图标…
,然后键入任何路径。按
OK
,解除警告,再次按
OK

对我来说,图标从记事本+ +的图标(默认为<代码> .txt <代码>文件)改为空白文件图标。


下次在快捷方式上选择“设置图标”时,Windows将首先显示一条警告,指出找不到以前设置的无效路径,因此这证明无论您填写的内容是否有效,都会保存在某个位置。

a
.chm
文件不包含图标资源。@SamAxe:当我通过WIX创建快捷方式时,使用相同的路径,图标将应用于快捷方式。