c# - 获取已安装程序的 DisplayIcon

标签 c# windows

我正在尝试获取计算机上已安装软件的图标。

已安装的软件列表是从这个注册表路径填充的: HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall

根据 DisplayName 排除重复项。

现在我尝试从键 DisplayIcon 获取图标。如果它存在。 DisplayIcon 中的值因软件而异。一些例子是休闲的:

  • D:\Program Files\FileZilla FTP Client\FileZilla.exe
  • C:\Program Files\Common Files\Microsoft Shared\OFFICE12\Office Setup Controller\OSETUP.DLL,1
  • D:\Program Files\Fiddler2\IE_Toolbar.ico
  • dfshim.dll,2
  • D:\Program Files\Winamp\winamp.exe,0
  • etc\git.ico

对于所有这些示例,我都可以使用图标。如果 InstallLocation + DisplayIcon 不是真正的来源,我可以在 InstallLocation 中搜索 DisplayIcon 名称(例如:DisplayIcon for GetDataBackFor* 是 gdbnt.exe 所以我搜索这个,如果找到我就拿他的图标)

问题在于其他应用程序(如 revo 或 Windows 卸载程序)如何获取没有 DisplayIcon 键的应用程序的图标。他们只有带有根目录的 InstallLocation。他们在该位置搜索 ico 或 exe?如果它们是多个可执行文件并且该可执行文件的名称看起来不像 DisplayName 怎么办?如果注册表中没有此类信息,他们如何从主要可执行文件中收集图标? 此类应用的示例包括 Google 地球、Apple 软件更新等。

最佳答案

我们可以从以下位置找到有关已安装产品图标的信息 此信息与卸载一起存储在安装程序\产品 key 的注册表中-

key 名称 - HKEY_CLASSES_ROOT\Installer\Products{productID}

值 - ProductIcon

从这里我们可以得到已安装应用程序的图标。 更多详情 http://newapputil.blogspot.in/2015/06/extract-icons-of-installed-windows_17.html

关于c# - 获取已安装程序的 DisplayIcon,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12283405/

相关文章:

c# - 在 Habanero 中,我将如何限制从数据库返回的对象数量

c# - 当前上下文中不存在名称 'temp'(C# 桌面应用程序)

windows - 如果在多行替换中死亡,Perl 会报告错误的行号。这是预期的还是错误?

linux - 写入磁盘时谁决定 block 大小?

c# - 在 XAML 中将 CallMethodAction 中的 TargetObject 设置为父 DataContext 中的 ViewModel

c# - 这种 SingleOrDefault() 优化是值得的还是过度/有害?

c# - 无法在 Win XP 机器上运行 netsh 命令

c++ - 自定义流实用程序

windows - Mule 文件传输以从 Windows SMB 共享读取文件

c++ - 在 Windows 中创建 C++ 非阻塞计时器