在InnoSetup中为开始菜单文件夹组设置图标

5

令我惊讶的是,我没有找到如何为开始菜单应用程序组文件夹设置图标的解决方案。我正在寻找InnoSetup脚本中的自动解决方案。

提前感谢您。


2
这似乎是一个有点奇怪的要求,因为(a)大多数应用程序不会自定义其开始菜单文件夹图标,所以你的图标看起来会很突兀,而且(b)随着Windows 7的程序固定和开始菜单搜索功能,几乎没有人会去深入查看所有程序,以便首先看到该文件夹。 - Joe White
1个回答

5
如果您想将*.ico作为资源使用(其中c:\somepath\icon.ico是指向您的图标的路径),请创建以下内容的desktop.ini文件:
[.ShellClassInfo]
IconResource=c:\somepath\icon.ico,0

如果想将可执行文件中的图标作为资源使用,可以创建像下面这样的 desktop.ini 文件(其中 c:\somepath\program.exe 是指向你的可执行文件的路径):
[.ShellClassInfo]
IconResource=c:\somepath\program.exe,0

将此desktop.ini文件保存到您要应用图标的目录中。非常重要的一点是,您必须将这个新创建的文件属性设置为隐藏系统,否则它将无法正常工作!

因此,请仔细检查InnoSetup是否会在安装时清除这些属性,如果您将文件包含在安装程序中。


+1 我没有意识到这就是原帖作者想要的。如果是的话,你可以使用"[ini]"部分来生成该文件。 - kobik
您也可以使用 PathMakeSystemFolder API 将其设置为系统文件夹。desktop.ini 将自动设置为正确的属性。 - kobik
@kobik,谢谢!我刚刚描述了如何独立地更改InnoSetup图标所需的内容。关于[ini]部分,你是对的,我稍后会包含实现方式 ;) - TLama
1
@kobik,这并不像我想象的那么简单;你必须通知shell有关更改的情况,并且SHChangeNotify是我的第一个候选项,它具有指针参数。最接近此功能的函数是SHGetSetFolderCustomSettings,它可以创建desktop.ini文件,但更复杂,更容易的方法可能是将其放入我最喜欢的外部库中。 - TLama
1
此外,您可以传递指针参数。只需将它们声明为 PCharprocedure SHChangeNotify(wEventId: Longint; uFlags: UINT; dwItem1, dwItem2: PChar); external 'SHChangeNotify@shell32.dll stdcall'。将 '' 作为 nil 传递。这里有一个很好的例子 - kobik
显示剩余3条评论

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