سؤال

لدي سؤال مشابه جدا هذا لكن الجواب لا يعمل بالنسبة لي.

البرمجيات التي أقوم بها في الإعداد تعتمد على VC ++ 2008 (SP1، بدقة)، وبالتالي، أحتاج إلى إيجاد حل لتثبيت VCRedist إذا لم يتم تثبيته بعد. أفهم الطريقة الصحيحة هي بناء MSI مع وحدات دمج، لكنها ليست على يدي.

إجابة السؤال المكرر الذي أشير إليه (واحد المقبول) لا يعمل بالنسبة لي لأن كل إصدار صغير (على سبيل المثال 9.0.30729.01 VS 9.0.30729.17) لديه GUIDs مناسبة، والتي لا أستطيع تخمين أو التنبؤ بالإصدارات المستقبلية أو التنبؤ بها وبعد علاوة على ذلك، أعتقد أن هذا لن يكشف عن استوديوهات المرئية وبالتالي تثبيت حزمة vcredist دون داع عندما يكون بالفعل على جهاز مطوري. لا أريد أن أحرق أي شخص مع هذا، بالتأكيد ليس شخصا لديه بالفعل Devstudio مثبتا.

الآن تقول إجابة أخرى، أود أن أنظر إلى مجلد Winsxs $WINDIR\WinSxS\x86_Microsoft.VC80.CRT_ ولكن هذا لا (حتى الآن) ساعدني في ضعي SP1، أم أن هناك أي شيء أفتقده في هذه المرحلة؟ هل هناك طاولة في مكان ما بأرقام الإصدار الداخلية "الخارجية"، لذلك يمكنني أن أقيم رقم إصدار بسيط معين؟

لا أستطيع أن أصدق أنه لا يوجد أي شيء مقدما من قبل Microsoft لهذا السيناريو، ولكن البحث عن Interwebs لفترة طويلة للغاية الآن يجلبني الآن إلى OL الجيدة :)

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

المحلول

يمكنك أن تأخذ النهج الموصى به لتثبيت DirectX: قم دائما بتشغيل إعادة التوزيع القابل لإعادة التوزيع. نظرا لأنه مطلوب وأنت تقوم بالفعل بشحنه، لا يوجد ضرر في تشغيله حتى لو كان مثبتا بالفعل.

نصائح أخرى

ل Visual Studio C ++ 2010، الأمور أسهل قليلا.

على عكس الحزم القابلة لإعادة التوزيع Visual C ++ و 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)

ملحوظة: سوف تحتاج إلى التحقق تحت WOW6432Node على نظام التشغيل 64 بت. (hklm software wow6432node Microsoft ....)

إذا كنت تحب الإصدار الأقدم، فإليك Guids

Visual C ++ 2010 رموز المنتج الحزمة القابلة لإعادة التوزيع

  • حزمة إعادة التوزيع Visual C ++ 2010 (X86) - {196BB40D-1578-3D01-B289-BEFC77A11A1E}
  • حزمة إعادة التوزيع Visual C ++ 2010 (X64) - {DA5E371C-63333-3D8A-93A4-6FD5B20BCC6E}
  • حزمة إعادة التوزيع Visual C ++ 2010 (IA64) - {C1A35166-4301-38E9-BA67-02823AD72A1B}

Visual C ++ 2010 SP1 قابلة لإعادة التوزيع رموز المنتج

  • حزمة إعادة التوزيع Visual C ++ 2010 المزود بحزمة الخدمة SP1 (X86) - {F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}
  • حزمة إعادة التوزيع Visual C ++ 2010 SP1 (x64) - {1D8E6291-B0D5-35EC-8441-6616F567A0F7}
  • الحزمة القابلة لإعادة توزيع Visual C ++ 2010 SP1 (IA64) - {88C73C1C-2DE5-3B01-AFB8-B46EF4AB41CD}

يبدو أن هناك حل آخر اقترح من قبل Microsoft-Developer، باستخدام MSiqueryProductstate API., ، للأسف تعتمد أيضا على GUIDs.

تحديث: ذهب الكود مباشر أمس ويبدو أنه يعمل بشكل جيد. فيما يلي ما يتم تخزينه: يتم فحصه للحصول على أحدث المعروفة من GUID والمسببة إلى إيطاليا - حيث يتم تثبيتها مثبتة. إذا فشل كلاهما، يتم تثبيته. تبدو أنها تعمل جيدا.

بالإضافة إلى ذلك، يتم تثبيته مع وسيطات سطر الأوامر "/ QB" مما يعني "غير مراقب ولكن غير مرئي". يرى هذا المدونة الأخرى وظيفة حول تلك المعالم.

FWIW، GUIDs ل Microsoft Visual C ++ 2008 / VC90 SP1 إعادة التوزيع - 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

² الطريق:$WINDIR\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729*

أفتح مصادر مشروع Visual C ++ على Github الذي يتحقق من DLL من VC ++ Redistrave على وجه التحديد وجعلها متاحة بموجب ترخيص Apache 2.0.

لديها ثلاث طرق مختلفة للتحقق من توفر VC ++ 9 و VC ++ 10 Runtimes:

  1. يتحقق apis msiqueryproductstatestate؛
  2. فحص محتويات مجلد Winsxs لمطابقة أدلة المنتجات؛ و
  3. يتحقق من دليل العمل الحالي لأي إصدارات محلية من تشغيل VC ++ 9 و VC ++ 10 (وتتفقد محتوياتها.)

إليك عينة من ما يستخدمه بالفعل:

 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 مشروع تحت Apache 2.0، لذلك لا تتردد في استخدامه في التطبيقات الخاصة بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top