如何检测VC++ 2008可再发行组件?

33

有没有一个注册表设置可以确定 Visual C++ redistributable 是否已经安装,无论是独立安装还是作为 Visual Studio 2008 的一部分?我知道我可以启动 VC++ 2008 redistributable 安装程序并让它处理检测,但如果已经在系统上安装了 redistributable,如果我能够检查到并避免启动安装程序会更好。

如果没有要搜索的设置也没关系,因为这只是我们新软件版本的初步安装程序所需的。我们不需要它用于我们正在开发的基于 Windows Installer 的安装程序,这些安装程序将取代旧技术,并使用合并模块。

13个回答

0

你可以检查WINDOWS\WinSxS目录下的文件,以查看你安装了哪些版本。通常情况下,多个版本可以同时安装,所以你可能需要检查你安装的具体版本。


0
我想要用以下值扩展GUID列表:

32位 30729.17
{9A25302D-30C0-39D9-BD6F-21E6EC160475}
32位 30729.01
{6AFCA4E1-9B78-3640-8F72-A7BF33448200}
64位 30729.17
{8220EEFE-38CD-377E-8595-13398D740ACE}
64位 30729.01
{0DF3AE91-E533-3960-8516-B23737F8B7A2}
VC++2008(sp1)
{3C3D696B-0DB7-3C6D-A356-3DB8CE541918}
VC++2008(原版)
{FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}
IA64 30729.01
{22E23C71-C27A-3F30-8849-BB6129E50679}
32位 30729.4148
{7B33F480-496D-334A-BAC2-205DEC0CBC2D}
Visual Studio 2008 Professional SP1
{D7DAD1E4-45F4-3B2B-899A-EA728167EC4F}
32位 30729.01
{F333A33D-125C-32A2-8DCE-5C5D14231E27}

所以请决定,是否通过GUID检查VCredist的存在是一个好主意。


0
发现了VC2008可再发行组件的注册表项。这是我的解决方案:
BOOL IsVC2008RedistInstalled(LPCTSTR pLogFile)
{
    TCHAR szLogEntry[256];
    memset(szLogEntry, '0', sizeof(szLogEntry));
    HKEY hKey;
    LONG lErr;

    TCHAR csid[256];
    _stprintf( csid, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{9A25302D-30C0-39D9-BD6F-21E6EC160475}"));
    lErr = RegOpenKeyEx(HKEY_LOCAL_MACHINE, csid, 0, KEY_QUERY_VALUE, &hKey);
    if (lErr == ERROR_SUCCESS)
    {
    _stprintf(szLogEntry, _T("VC2008 Redistributable was installed before.\n"));
    toFile(pLogFile, szLogEntry);
    return TRUE;
    }
    else
    {
    _stprintf(szLogEntry, _T("VC2008 Redistributable was not installed before. %ld\n"), lErr);
    toFile(pLogFile, szLogEntry);
    return FALSE;
    }
}

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