通过注册表检测已安装的程序

Mar*_*ler 58 windows registry

我需要开发一个过程来检测用户计算机是否安装了某些程序,如果安装了,那么是什么版本.我相信我需要一个包含注册表位置和密钥的列表来查找并将其提供给程序,这不是问题.有没有更好的方法来实现这一目标?

我的第一个想法是在卸载条目中检查注册表,但似乎我想要检测的其中一个应用程序没有.使用应用程序进行输入的所有注册表的标准位置是什么?

Ber*_*Ott 36

在64位系统上,x64密钥是:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
Run Code Online (Sandbox Code Playgroud)

大多数程序都列在那里.看看钥匙: DisplayName DisplayVersion

请注意,最后一个并不总是设置!

在64位系统上,x86密钥(通常具有更多条目)是:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
Run Code Online (Sandbox Code Playgroud)


Pis*_*3.0 35

应将特定于用户的设置写入HKCU\Software,将机器特定设置写入HKLM\Software.在这些关键词下,结构[software vendor name]\[application name](例如HKLM\Software\Microsoft\Internet Explorer)可能是最常见的,但这只是一种惯例,而不是自然法则.

许多(大多数?)应用程序还添加了卸载条目HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\[app name],但同样,并非所有应用程序都执行此操作.

这些是最重要的关键; 但是,注册表的内容不必完全代表已安装的软件 - 也许应用程序已安装一次,但随后被手动删除,或者卸载程序可能没有删除它的所有痕迹.如果您想确定,请检查文件系统以查看应用程序是否仍然存在于其注册表项所在的位置.

编辑:

如果您是组管理员的成员,则可以检查HKEY_USERS配置单元 - 每个用户的HKCU实际驻留在那里(您需要知道用户SID,或者完成所有这些操作).

注意:正如@Brian Ensink所说,"已安装"是一个模糊概念 - 我们是否试图找到用户可以运行的内容?有些软件甚至根本没有写入注册表:搜索"便携式应用程序"以查看经过特别修改的应用程序,以直接从媒体(CD/USB)运行,而不是在计算机上留下任何痕迹.我们可能还必须扫描磁盘,网络磁盘,以及用户下载的任何内容,以及互联网上可通过世界访问的Windows共享(是的,合法存在这样的事情 - \\live.sysinternals.com\tools想到这一点).在这个方向上,除非系统策略阻止,否则用户可以运行的内容没有实际限制.

  • 如何填充添加/删除程序列表?我列出的一半以上的应用程序在上述位置没有注册表项(不包括Microsoft应用程序). (13认同)

Bri*_*ink 9

您可以使用MSI API枚举Windows Installer安装的所有内容,但不会列出计算机上可用的所有软件.如果不了解您的需求,我认为"已安装"的概念有点模糊.有许多方法可以将软件部署到系统,从大型复杂的安装程序到ZIP文件以及介于两者之间的所有内容.

  • 这是一个很好的答案(至少对我来说),但如果你包含一个链接,它会更好. (5认同)
  • 我同意RenniePet; 一个例子或至少一个关闭的地方的链接本来不错. (2认同)

MSa*_*ers 6

应用程序不需要任何注册表项.实际上,根本不需要安装许多应用程序.U3 USB记忆棒就是一个很好的例子; 它们上的程序只是从文件系统运行.

如上所述,尽管可以通过卸载注册表项找到大多数好的应用程序.这实际上是一对钥匙,每用户和每台机器(HKCU/HKLM - Piskvor只提到了HKLM).但它并不(总是)为您提供安装目录.

如果它在HKCU,那么你必须意识到这HKEY_CURRENT_USER真的意味着"当前用户".其他用户拥有自己的HKCU条目和他们自己安装的软件.你找不到.阅读每个 HKEY_USERS蜂巢都是具有漫游配置文件的企业网络上的灾难.您真的不想从远程[美国|中国|欧洲]办事处获取1000个帐户.

即使安装了应用程序,并且您知道在哪里,它也可能没有相同的"版本"概念.最好的来源是可执行文件中的"版本"资源.这确实是一个复数,所以你必须找到所有这些,从所有人中提取版本资源,并在发生冲突时决定合理的事情.

所以 - 祝你好运.有几种失败的方法.