0

我正在编写一个软件,在给定的时刻需要查找是否已经安装了给定的软件(通过它的名称) - 所以安装程序在安装它的软件时会做同样的事情,有时会提醒该软件已经安装在电脑中。

问题是我不知道哪个是这样做的好方法。现在软件只是查看默认文件夹,如果找不到.exe,他会要求用户指出他安装软件的位置,否则认为它已卸载。

但我希望它自己做事;它应该能够查找是否在没有用户输入的情况下安装了软件,我不确定哪种方法是一种有效的方法。

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

那么在 C++ 中没有其他成本更低的选择吗?

谢谢,

莫默吉尔

4

3 回答 3

4

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

如果使用“解压缩”安装,则没有简洁的解决方案。

于 2012-08-18T12:42:41.000 回答
3

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

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

MsiGetProductInfo如果您使用 Windows Installer,可能会为您提供所需的信息。

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

于 2012-08-18T13:27:10.507 回答