使用C ++查找Windows中是否安装特定软件的最合适方法是哪种?

时间:2012-08-18 12:38:23

标签: c++ windows-7

我正在编写一个软件,在给定的时刻需要查找是否已经安装了某个特定的软件(通过其名称) - 所以安装程序在安装其软件时会做同样的事情,有时甚至声称该软件已安装在PC中。

问题在于我不知道哪种方法可以做到这一点。现在,软件只查看默认文件夹,如果无法找到.exe,他会要求用户指出他安装软件的位置,或者考虑将其卸载。

但我希望它可以自己做事;它应该能够找到一个软件是否安装没有用户输入,我不知道这是一个有效的方法。

我现在找到的唯一方法就是做同样的事情Windows的“添加/删除程序”:查看许多注册表项并尝试找到它,但我认为这需要花费太多不必要的时间给它看起来这样的事实在很多地方只找到一个软件。

C ++中没有其他成本较低的选项吗?

谢谢,

Momergil

3 个答案:

答案 0 :(得分:4)

这完全取决于您想要询问的内容是如何安装的。如果它始终从MSI安装,您可以阅读MSI并学习调用API和/或读取注册表以查看其唯一ID是否存在。

如果使用'unzip'安装,则没有简洁的解决方案。

答案 1 :(得分:3)

您正在寻找的是密钥路径:与该软件唯一关联的注册表位置。
您有两种选择:

  1. 安装软件时始终存在 的注册表项 例如。 HKEY_CURRENT_USER \ SOFTWARE \ BitTorrent的\ uTorrent的
  2. 查看该软件的唯一卸载条目:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall&
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall
    您将始终在此处找到一个名为 DisplayName 的REG_SZ,它在“添加删除软件”控制面板扩展名中用作标题。

答案 2 :(得分:2)

如果您使用的是Windows Installer,

MsiGetProductInfo可能会为您提供所需的信息。

如果你没有,那么,那就是你的问题......这是有原因的。