确定是否安装了 VS 或 SSMS,如果安装了,是哪个版本

Determine whether VS or SSMS is installed and, if so, which version

我正在为几个版本的 Visual Studio、Data Tools 和 SQL Server Management Studio 创建一个插件安装包。我的安装包必须能够检测安装了这些工具中的哪一个(如果有的话),以便我的安装向导可以禁用机器上不存在的软件的复选框。

在官方的 Inno 安装文档中我发现 this:

function RegKeyExists(const RootKey: Integer; const SubKeyName: String): Boolean;

所以现在我有一种检查注册表的方法,而且我很确定 VS 安装程序会在其中写入一些数据。

经过一些挖掘,我在 this link and this one too 找到了另一篇有用的文章,似乎对我有进一步的指导。

我希望尽快进入我的注册表以确保这是我正在寻找的东西,但令我惊讶的是我正在寻找的参考资料不在那里。

为什么这是我不知道所以我的第一个问题是:

问题:为什么说明书告诉我要往下看

HKLM\Software\Microsoft\DevDiv\VS\Servicing.0\Ultimate

当我的 'DevDiv' 子文件夹甚至不包含 'VS' 子文件夹时?

经过更多挖掘后,我发现了另一种方法,可以通过 this site 上的卸载信息检测我的机器上是否安装了软件。

在查看引用的注册表位置后,我发现大多数软件都用一个名为 Guid 的子文件夹表示。

问题:在注册表的卸载信息中,一个软件产品是通过完全随机的Guid注册自己还是每次安装软件时子文件夹名称都相同?换句话说,我可以只查找哪个 Guid 命名子文件夹包含 ie 的信息吗? VS2012,并将其硬编码到我的脚本中作为要搜索的确切位置?

最后的想法:如果有更好的方法来查找安装信息,我将不胜感激。加载项需要检测 VS 2010、2012、Date Tools 和 SSMS 2012。

我相信您可能要查找的内容(就正确的注册表项而言)位于 HKEY_CURRENT_USER (HKCU) 下。例如,HKCU\Software\Microsoft\VisualStudio 每个版本都有密钥,每个版本有两个密钥(版本和 version_config)。

我当前的系统有 HCKU\Software\Microsoft\VisualStudio.0(和 10.0_Config)的条目,用于 Visual Studio 和 HCKU\Software\Microsoft\Microsoft SQL Server0 的一个版本,这似乎是您想要的 Visual Studio 和 SSMS。我无法使用 Date Tools(因为我没有),但我怀疑在同一个注册表分支中也有它们的注册表项。