【发布时间】:2015-05-06 12:35:13
【问题描述】:
我正在为几个版本的 Visual Studio、Data Tools 和 SQL Server Management Studio 的插件创建一个安装包。我的安装包必须能够检测安装了这些工具中的哪一个(如果有),以便我的安装向导可以禁用机器上不存在的软件的复选框。
在 Inno 官方设置文档中我找到了this:
function RegKeyExists(const RootKey: Integer; const SubKeyName: String): Boolean;
所以现在我有了一种检查注册表的方法,而且我很确定 VS setup 会在其中写入一些数据。
经过一番挖掘,我在this link 和this one too 找到了另一篇有用的文章,似乎可以进一步指导我。
我希望尽快进入我的注册表以确保这是我正在寻找的东西,但令我惊讶的是,我正在寻找的参考资料不在那里。
为什么会这样我不知道所以我的第一个问题是:
问题:为什么说明告诉我要往下看
HKLM\Software\Microsoft\DevDiv\VS\Servicing\11.0\Ultimate
当我的“DevDiv”子文件夹甚至不包含“VS”子文件夹时?
经过更多挖掘后,我发现了另一种方法,通过this site 上的卸载信息来检测我的机器上是否安装了软件。
在查看了引用的注册表位置后,我发现大多数软件都用一个名为 Guid 的子文件夹表示。
问题:在注册表的卸载信息中,一个软件产品是通过一个完全随机的Guid注册自己,还是每次安装软件时子文件夹名称都一样?换句话说,我可以只查找哪个名为 Guid 的子文件夹包含 ie 的信息吗? VS2012,并将其硬编码到我的脚本中作为搜索的确切位置?
最后的想法:如果有更好的方法来查找安装信息,我将不胜感激。 VS 2010、2012、Date Tools 和 SSMS 2012 的插件需要检测。
【问题讨论】:
-
这个问题与Inno Setup无关。您的问题是“如何检测是否安装了 VS,如果是,我如何确定哪个版本?”,这些都与 Inno Setup 无关。您将使用 Inno Setup 安装中的信息这一事实与问题无关。至于“为什么说明告诉我......?”,请询问编写说明的人 - 我们不能代表他们发言。
-
另外,你看过
HKCU\Software\Microsoft\VisualStudio吗?它有版本的密钥,以及配置信息。例如,我现在查看10.0_Config键,它有一个名为InstallDir的条目,而10.0键有一个ExtensionManager和External Tools的子键。HKCU\Software\Microsoft\Microsoft SQL Server注册表项下有类似的信息,可能对您也有用。 -
@KenWhite 感谢您的编辑和参考,看来这正是我正在寻找的东西。把它写下来,这样我就可以接受了。