【问题标题】:Get DisplayIcon for installed programs获取已安装程序的 DisplayIcon
【发布时间】:2012-09-05 14:10:17
【问题描述】:

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

已安装的软件列表是从此注册表路径填充的: 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 名称(例如:GetDataBackFor* 的 DisplayIcon 是 gdbnt.exe,所以我搜索这个,如果找到我就拿他的图标)

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

【问题讨论】:

  • 你不明白这个问题,或者我解释得很糟糕。问题在于那些没有关于图标的任何信息的程序(可执行文件、图标、InstallLocation 中只有一个可执行文件)。
  • 你是对的。我误解了这个问题。 :-) 在您展示的示例中,它是指示的图标:对于 FileZilla.exe,找到的第一个图标;对于 Office,OSETUP.DLL 中索引 1 处的图标;对于 Fiddler2,它是在安装路径下的 `etc` 文件夹中找到的图标文件 IE_Toolbar.ico' itself; for Winamp, it's the first icon found (index 0) in Winamp.exe; the final one is for the icon file git.ico`。
  • 没错,对于那些场景,我可以使用图标。但是有一些程序,如谷歌地球,没有任何信息可以帮助在注册表中获取图标。无论如何,revo 卸载程序和 Windows 卸载程序可以以某种方式获取图标......我不知道如何。跨度>
  • 这是我获取已安装程序的课程。这不是完美的解决方案,但时间是一个问题。也许它会帮助你。 gist.github.com/andySF/19f3569b50db18095a3d

标签: c# windows


【解决方案1】:

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

密钥名称 - HKEY_CLASSES_ROOT\Installer\Products{productID}

价值 - ProductIcon

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

【讨论】:

    猜你喜欢
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多