如何从添加/删除程序控制面板获取图标

时间:2010-11-18 15:21:19

标签: c# c++ windows registry

我正在尝试创建一个基本上模拟Windows控制面板的添加/删除程序功能的应用程序。我目前正在使用注册表,我不使用 WMI因为是SL SLOW而且只返回由.msi文件安装的软件,我正在阅读的是我正在阅读的密钥:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall HKCU\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall

我认为所有软件都安装了,但图标有问题,我不知道如何提取出现在控制面板上的图标。有些键具有DisplayIcon属性,但有些键则没有。我尝试了两件事:

首先在DisplayIcon密钥上提取应用程序的图标。

其次,尝试识别C:\Windows\Installer\FOLDER以提取某个文件的图标。但并不完美,我只获得了大约80%的图标。我知道有很多程序可以做得很好......例如“SoftwareInformer”。

我阅读了相关内容,但我找到了有关ARPPRODUCTICONWiX以及Icon Table的信息,但我不确定该表在哪里,是否有任何方法可以访问它

我也在搜索一个没有运气的开源应用程序。

4 个答案:

答案 0 :(得分:4)

我参加派对可能为时已晚,但如果您在

下查看
HKEY_CLASSES_ROOT\Installer\Products\{GUID}

您将找到带有路径的“ProductIcon”字符串值(但不适用于所有产品)。 我认为它与{sys_drive}:\ Windows \ Installer {GUID}文件夹中的基本相同。但即使是“程序和功能”也没有显示所有图标。

PS:当然,我无法发布图片,因为我没有足够的分数,呵呵......

答案 1 :(得分:1)

并非控制面板小程序中列出的所有应用程序都有“应用程序”图标 - 有些只使用默认图标,例如“Microsoft Device Emulator(64位)3.0版 - ENU”

答案 2 :(得分:0)

如果您能够获得已安装exe的路径 (从注册表值获取)

使用此方法

radiobutton.Image = Icon.ExtractAssociatedIcon(_fullPath).ToBitmap();

// _ fullPath是你的exe文件的路径,如果exe有一个相关的图标,它就可以完美地运行

它对我来说是100%的工作

答案 3 :(得分:0)

如果它是您正在寻找的Windows原生图标,您可能有更多地方可以找到它们(已经在您自己的机器上)。

在对“从图标中移除快捷方式箭头”问题进行疑难解答时,我偶然发现了这条信息链接。在阅读以下链接中的信息后,您很可能会找到所需内容。该链接仅在性质上是信息性的,不提供图标下载(毕竟,它们已经在您的计算机上)。

https://diymediahome.org/windows-icons-reference-list-with-details-locations-images/