如何通过注册表可靠地确定用户机器上是否安装了32位Visual Studio 2013可再发行组件?

12
我正在使用DeployMaster来为使用Qt编写的32位Windows应用程序构建安装程序。
该可执行文件依赖于Visual Studio 2013 redistributable,也就是说,用户在运行此应用程序之前必须安装32位Visual Studio 2013 redistributable
我已经搜索了谷歌和其他StackOverflow问题。特别地,此链接提供了要检查的确切注册表键值,但是针对的是VS 2008。
我需要VS 2013,而不是VS 2008。
最好是一个可靠的注册表检查方法,而非程序解决方案,因为我可以通过DeployMaster安装程序轻松检查注册表键。如果确定系统没有安装redistributable,还可以轻松启动安装程序。
有人知道一种可靠的方法(最好使用注册表键),以确定32位VS 2013 redistributable是否已安装在最终用户的计算机上吗?

也许自己解决这个问题的方法是:在一台没有安装redist的机器上(可以是虚拟机),运行SysInternal的ProcMon并开始安装。这将显示它创建的任何注册表键。选择一个合适的键(例如来自HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall或HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Installer \ UserData \ S-1-5-18 \ Products)即可完成。 - stijn
1
认为关键是HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DevDiv\vc\Servicing\12.0\RuntimeMinimum(检查Install = 1),但我想确认这个或任何答案是可靠的。好想法(虽然为什么程序员被迫做这种程度的工作才能看到基本的Microsoft运行时系统是否安装?这是微软的另一个失败). - Dan Nissenbaum
1
是的,那个键也被使用了。虽然我不太赞同这种责备的态度...最终总有人会出错,我不如声称这是DeployMaster的问题,因为他们让你自己解决 :P 因为像InstallShield这样的软件已经内置了VC redists功能。 - stijn
1
@stijn InstallShield - 又一个需要你“付费”来支持另一家公司功能的 $1000 产品,而你还必须为其不足之处支付费用。尽管对他们来说很好,但这种情况并非如此。 - Dan Nissenbaum
5个回答

12
我正在使用以下注册表键: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\12.0\VC\Runtimes\x86 Installed HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\12.0\VC\Runtimes\x64 Installed 经确认,这些键只会在安装了redist后出现,并且它们更接近于之前版本的键。例如VC++ 2010 的键是: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\VC\VCRedist\x86 Installed HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\VC\VCRedist\x64 Installed

6
你需要的密钥是 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DevDiv\vc\Servicing\12.0\RuntimeMinimum

2

如果有人正在查看此内容,但正在使用NSIS部署他们的程序。

您可以检查以下内容:

ReadRegDword $0 HKLM "SOFTWARE\Wow6432Node\Microsoft\DevDiv\vc\Servicing\12.0\RuntimeMinimum" "Install"

如果$0等于1,那么它已安装。否则,它未安装。

1
这个键并不总是被创建,也不是一个可靠的指示器。 - Wobbles

1
我在这里找到它:

32bit
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{13A4EE12-23EA-3371-91EE-EFB36DDFFF3E}
or
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{13A4EE12-23EA-3371-91EE-EFB36DDFFF3E}

64bit
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{A749D8E6-B613-3BE3-8F5F-045C84EBA29B}

这可能比devdiv密钥更好,因为它是用于卸载已安装的msi的Windows键。现在我只希望Microsoft的devdiv可以与Windows团队交流,以便我们可以有一个规范的位置来检测这些内容,并且有一个Redistributable的规范名称。提示Microsoft,它不叫做“最小运行时”。

1

对于 Visual Studio 2013 Update 5 的 32 位版本(12.0.40664),密钥为:

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{8122DAB1-ED4D-3676-BB0A-CA368196543E}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接