我有一个与this one非常相似的问题,但答案对我不起作用。
我为其维护安装的软件依赖于VC++ 2008 (准确地说,是SP1),因此如果还没有安装,我需要找到一个安装VCRedist的解决方案。我知道正确的方法应该是使用合并模块来构建msi,但这不在我的掌握之中。
我提到的重复问题的答案(被接受的问题)对我不起作用,因为每个微小的版本(例如9.0.30729.01和9.0.30729.17)都有合适的GUID,我无法猜测或预测未来的版本。此外,我认为这不会检测到Visual Studios,因此不必要地安装已经在开发人员机器上的VCRedist包。我不想用这个来困扰任何人,当然不是已经安装了DevStudio的人。
现在,另一个答案是我应该查看WinSxs文件夹,比如$WINDIR\WinSxS\x86_Microsoft.VC80.CRT_,但这(还)不能帮助我暗示SP1,或者我在这一点上遗漏了什么?有没有一个包含内部和“外部”版本号的表,所以我可以暗示某个次要版本号?
我不敢相信微软没有为这个场景提供任何东西,但是现在已经在互联网上搜索了太长时间了,这让我又回到了过去:)
发布于 2009-04-08 17:29:54
您可以采用推荐的安装directx的方法:始终运行可再发行文件。由于它是必需的,而且您已经发布了它,所以即使已经安装了它,运行它也没有什么坏处。
发布于 2011-12-18 23:34:45
对于Visual Studio C++ 2010,things got a bit easier。
与Visual C++ 2005和2008可再发行软件包不同,有一些注册表项可用于检测是否存在Visual C++ 2010可再发行软件包。
Visual C++ 2010可再发行的包检测注册表值
Visual C++ 2010可再发行组件包(x86)
安装的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x86 =1 (REG_DWORD)
Visual C++ 2010可再发行组件包(x64)
安装的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x64 =1 (REG_DWORD)
Visual C++ 2010可再发行组件包(ia64)
安装的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\ia64 =1 (REG_DWORD)
注意::您需要在64位操作系统上的Wow6432Node下进行检查。(HKLM\Software\Wow6432Node\Microsoft....)
如果您喜欢较旧的版本,这里有GUID
Visual C++ 2010可再发行软件包产品代码
{196BB40D-1578-3D01-B289-BEFC77A11A1E}
{196BB40D-1578-3D01-B289-BEFC77A11A1E}
Visual C++ 2010 SP1可再发行软件包产品代码
{F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}
发布于 2009-04-09 15:26:32
看起来像是微软开发人员使用MsiQueryProductState API提出了another solution,可惜也依赖于GUID。
更新:代码昨天上线了,看起来运行得很好。这是正在做的事情:检查最新的已知GUID和路径²到应该安装它的位置。如果两者都失败,则会安装它。这似乎工作得很好。
此外,它还安装了命令行参数"/qb“,意思是”无人值守但不是不可见的“。有关这些参数的信息,请参阅this other blog post。
微软Visual C++ 2008 / VC90 SP1可再发行版的FWIW、GUIDs x86 9.0.30729
²路径:$WINDIR\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729*
https://stackoverflow.com/questions/730889
复制相似问题