سؤال

هل هناك إعداد التسجيل الذي لا يمكن أن ننظر إلى تحديد ما إذا كان أو لم يكن Visual C + + القابلة لإعادة التوزيع المثبتة ، سواء كان مستقل أو كجزء من برنامج Visual Studio عام 2008 ؟ وأنا أعلم أنني يمكن إطلاق VC++ 2008 redistributable المثبت والسماح لها التعامل مع الكشف ، لكنها تبدو أنظف إذا أنا يمكن أن تحقق من ذلك و لا يكلف نفسه عناء إطلاق المثبت إذا القابلة لإعادة التوزيع بالفعل على النظام.

إنه ليس هناك مشكلة إذا لم يكن هناك إعداد البحث ، كما أن هذا هو مجرد المثبتات الأولية التي لدينا النسخة الجديدة من برنامجنا.لن نحتاج الجديدة المستندة إلى Windows Installer التركيب أن نعمل على أن تحل محل القديمة التكنولوجيا التي تستخدمها الوحدات النمطية دمج.

هل كانت مفيدة؟

المحلول

وتحقق التسجيل:

<اقتباس فقرة>   

وVC ++ 2008 (SP1):   HKLM \ SOFTWARE \ مايكروسوفت \ ويندوز \ \ إلغاء التثبيت \ {3C3D696B-0DB7-3C6D-A356-3DB8CE541918}

أو

<اقتباس فقرة>   

وVC ++ 2008 (الأصلي):   HKLM \ SOFTWARE \ مايكروسوفت \ ويندوز \ \ إلغاء التثبيت \ {FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}

نصائح أخرى

أنا لا أعتقد أن أي من هذه الحلول يمكن أن تساعد عندما الخاص بك باستخدام نظام التشغيل مختلفة !بالنسبة السابقين ، MsiQueryProductState دائما عاد -1 باستخدام فيستا VC8.0

في حين -1 بالنسبة VC8.0/8.0 SP1/9.0 مع ويندوز 7 !حتى GUID الحل الذي تقدمه microsoft لا يعمل في جميع الحالات

لذا أعتقد أنا مجبر على عالقة مع %windir%\winsxs النهج والبحث عن

  • x86_Microsoft.VC80.CRT*
  • x86_Microsoft.VC90.CRT*

بالنسبة لأولئك الذين يبحثون عن كل Guid, هنا قائمة تم إنشاؤها:

Visual C++ 2005 ملفات وقت التشغيل

* VC 8.0 (x86) - {A49F249F-0C91-497F-86DF-B2585E8E76B7}
* VC 8.0 (x64) - {6E8E85E8-CE4B-4FF5-91F7-04999C9FAE6A}
* VC 8.0 (ia64) - {03ED71EA-F531-4927-AABD-1C31BCE8E187}

Visual C++ 2005 SP1 runtime files

* VC 8.0 SP1 (x86) - {7299052B-02A4-4627-81F2-1818DA5D550D}
* VC 8.0 SP1 (x64) - {071C9B48-7C32-4621-A0AC-3F809523288F}
* VC 8.0 SP1 (ia64) - {0F8FB34E-675E-42ED-850B-29D98C2ECE08}

Visual C++ 2005 SP1 ATL الأمن تحديث ملفات وقت التشغيل

* VC 8.0 SP1 ATL Patch (x86) - {837B34E3-7C30-493C-8F6A-2B0F04E2912C}
* VC 8.0 SP1 ATL Patch (x64) - {6CE5BAE9-D3CA-4B99-891A-1DC6C118A5FC}
* VC 8.0 SP1 ATL Patch (ia64) - {85025851-A784-46D8-950D-05CB3CA43A13}

2008 Visual C++ runtime files

* VC 9.0 (x86) - {FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}
* VC 9.0 (x64) - {350AA351-21FA-3270-8B7A-835434E766AD}
* VC 9.0 (ia64) - {2B547B43-DB50-3139-9EBE-37D419E0F5FA} 

Visual C++ 2008 SP1 runtime files

* VC 9.0 SP1 (x86) - {9A25302D-30C0-39D9-BD6F-21E6EC160475}
* VC 9.0 SP1 (x64) - {8220EEFE-38CD-377E-8595-13398D740ACE}
* VC 9.0 SP1 (ia64) - {5827ECE1-AEB0-328E-B813-6FC68622C1F9}

Visual C++ 2008 SP1 ATL الأمن تحديث ملفات وقت التشغيل

* VC 9.0 SP1 ATL (x86) - {1F1C2DFC-2D24-3E06-BCB8-725134ADF989}
* VC 9.0 SP1 ATL (x64) - {4B6C7001-C7D6-3710-913E-5BC23FCE91E6}
* VC 9.0 SP1 ATL (ia64) - {977AD349-C2A8-39DD-9273-285C08987C7B}

وآخر واحد لVC2005:

والبصرية C ++ 2005 حزمة الخدمة Service Pack 1 القابلة لإعادة التوزيع تحديث أمان MFC حزمة

* VC 8.0 SP1 MFCLOC Patch (x86) - {710F4C1C-CC18-4C49-8CBF-51240C89A1A2}
* VC 8.0 SP1 MFCLOC Patch (x64) - {AD8A2FA1-06E7-4B0D-927D-6E54B3D31028}
* VC 8.0 SP1 MFCLOC Patch (ia64) - {C2F60BDA-462A-4A72-8E4D-CA431A56E9EA}

و8.0.50727.6195

http://www.microsoft. كوم / تنزيل / details.aspx؟ familyid = AE2E1A40-7B45-4FE9-A20F-2ED2923ACA62

وسريعة وقذرة:

if (LoadLibrary(L"msvcrt80.dll")!=NULL)
{
  // it is installed
}

وفشل LoadLibrary ستتعامل البحث في مسارات بالنسبة لك.

يبدو أن هناك حل آخر المقترحة من قبل Microsoft المطور باستخدام MsiQueryProductState API, للأسف أيضا الاعتماد على Guid.

التحديث:رمز ذهب الحية أمس ويبدو أن تعمل بشكل جيد.هنا هو ما هو بيينغ به:هو التحقق من أحدث المعروفة معي GUID و path2-أين-من-هو-من المفترض-أن يكون مثبتا.إذا كان كل فشل ، تثبيته.ويبدو أن تعمل بشكل جيد.

بالإضافة إلى ذلك, يتم تثبيته مع وسيطات سطر الأوامر "/qb" التي تعني "غير المراقب ولكن غير مرئية".انظر هذا بلوق وظيفة عن تلك params.

FWIW, Guid for Microsoft Visual C++ 2008 / VC90 SP1 Redistributable - x86 9.0.30729

  • 64bit 30729.17:8220EEFE-38CD-377E-8595-13398D740ACE
  • 32bit 30729.17:9A25302D-30C0-39D9-BD6F-21E6EC160475
  • 32bit 30729.01:6AFCA4E1-9B78-3640-8F72-A7BF33448200

2 المسار:$WINDIR\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729*

والتحقق من وجود $WINDIR\WinSxS\x86_Microsoft.VC90.CRT_* إذا، على سبيل المثال، كنت التحقق من وجود البصرية ستوديو 2008 القابلة.

أنا مفتوح المصدر مشروع Visual C++ على جيثب أن يتحقق VC++ redistributable DLLs على وجه التحديد وجعلها متاحة تحت رخصة أباتشي 2.0.

له ثلاثة أساليب مختلفة من أجل التحقق من توافر VC++9 و VC++10 أوقات التشغيل:

  1. يتحقق MsiQueryProductState واجهات برمجة التطبيقات ؛
  2. فحص محتويات المجلد WinSxS على مطابقة المنتج الدلائل ؛ و
  3. يتحقق دليل العمل الحالي لأي الإصدارات المحلية من VC++9 و VC++10 runtimes (وتفحص محتوياتها.)

تحرير:هنا عينة مما يبدو في الواقع مثل:

 wcout << _T("Checking for the availability of VC++ runtimes..") << endl;
 wcout << _T("----------- Visual C++ 2008 (VC++9) -----------") << endl;
 wcout << _T("Visual C++ 2008 (x86) ? ") << (IsVC2008Installed_x86() ? _T("true") : _T("false")) << endl;
 wcout << _T("Visual C++ 2008 (x64) ? ") << (IsVC2008Installed_x64() ? _T("true") : _T("false")) << endl;
 wcout << _T("Visual C++ 2008 SP1 (x86) ? ") << (IsVC2008SP1Installed_x86() ? _T("true") : _T("false")) << endl;
 wcout << _T("Visual C++ 2008 SP1 (x64) ? ") << (IsVC2008SP1Installed_x64() ? _T("true") : _T("false")) << endl;

أنا رخصت crt-كاشف المشروع تحت أباتشي 2.0, لذا لا تتردد في استخدامها في التطبيقات الخاصة بك.

التحديث بالنسبة لأي شخص آخر ضرب هذه المشكلة:

1) إذا كان لديك Visual Studio مثبتا المطلوبة DLLs سوف تكون موجودة ، ولكن "redist حزمة" لا ، حتى مفاتيح التسجيل مفقودة.(أيهذا سوف تعطي سلبية كاذبة).ومع ذلك ، تثبيت redist على القمة في هذه الحالة غير مؤذية.

2) كل الرئيسية الافراج عن redist (أي مزيج من VS2005/VS2008, x86/x64/IA64 و حزم الخدمات:SP1,ATL التحديث الأمني) مختلفة GUID.أهتم إذا كنت تتوقع أن نشر التطبيق الخاص بك على حد سواء x86 و x64 جهاز كمبيوتر شخصى.

3) إذا كنت تستخدم LoadLibrary أو التحقق من ملفات Dll, تأكد من الهدف الإصدار الصحيح.إذا كنت تبحث عن "أي" نسخ من msvcrt80.dll (الخ) ثم أنت لن تكون قادرة على معرفة ما إذا كان الإصدار الخاص بك من البرنامج مرتبط.

رمز المنتج "Microsoft Visual C++ 2008 Service Pack 1 الحزمة القابلة لإعادة التوزيع MFC Security Update (x86)" هو {9BE518E6-ECC6-35A9-88E4-87755C07200F}

ويمكنك التحقق من الملفات تحت الدليل WINDOWS \ WinSxS لمعرفة أي إصدارات قمت بتثبيتها. في كثير من الأحيان يمكن تثبيت العديد من الإصدارات في وقت واحد لذلك قد تحتاج إلى التحقق من إصدارات معينة قمت بتثبيتها.

وأود أن توسيع قائمة GUID مع القيم التالية:

و32BIT و30729.17
{9A25302D-30C0-39D9-BD6F-21E6EC160475}
32BIT و30729.01
{6AFCA4E1-9B78-3640-8F72-A7BF33448200}
64BIT 30729.17
{8220EEFE-38CD-377E-8595-13398D740ACE}
64BIT 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}
32BIT و30٬729،4148
{7B33F480-496D-334A-BAC2-205DEC0CBC2D}
البصرية ستوديو 2008 SP1 المهنية
{D7DAD1E4-45F4-3B2B-899A-EA728167EC4F}
32BIT و30729.01
{F333A33D-125C-32A2-8DCE-5C5D14231E27}

وهكذا يرجى اتخاذ قرار، سواء كان فكرة جيدة للتحقق من وجود VCredist من المعرفات الفريدة العمومية.

أضمن طريقة هي باستخدام MsiQueryProductState API مع GUID مختلفة vcredist الإصدارات.

يعمل!

التحيات.

والعثور على إدخال التسجيل القابلة 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;
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top