विजुअल C ++ Redistributable Visual Studio 2012 स्थापित है या नहीं, इसका पता कैसे लगाया जाए?
मैंने Google की कोशिश की और किसी ने भी यह सवाल नहीं पूछा, आश्चर्य!
विजुअल C ++ Redistributable Visual Studio 2012 स्थापित है या नहीं, इसका पता कैसे लगाया जाए?
मैंने Google की कोशिश की और किसी ने भी यह सवाल नहीं पूछा, आश्चर्य!
जवाबों:
यह निर्भर करता है कि आप किस संस्करण का उपयोग कर रहे हैं। इन दो 2012 कुंजियों ने अपडेट 4. डाउनलोड करने के लिए अपने संबंधित संस्करणों के साथ मेरे लिए अच्छा काम किया है। कृपया ध्यान रखें कि इनमें से कुछ स्थान ओएस-निर्भर हो सकते हैं। मैंने यह जानकारी विंडोज 10 x64 बॉक्स से एकत्र की है । मैं बस आगे बढ़ने जा रहा हूं और इन सभी रेडिस्ट संस्करणों को डंप कर रहा हूं और इंस्टालेशन का पता लगाने के लिए मेरे द्वारा खोजे जाने वाले रेज कुंजी।
Microsoft Visual C++ 2005 Redistributable (x64)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\1af2a8da7e60d0b429d7e6453b3d0182
Configuration: x64
Version: 6.0.2900.2180
डायरेक्ट डाउनलोड URL: https://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x64.EXE
Microsoft Visual C++ 2005 Redistributable (x86)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\c1c4f01781cc94c4c8fb1542c0981a2a
Configuration: x86
Version: 6.0.2900.2180
डायरेक्ट डाउनलोड URL: https://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x86.EXE
Microsoft Visual C++ 2008 Redistributable - x64 9.0.30729.6161 (SP1)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\67D6ECF5CD5FBA732B8B22BAC8DE1B4D
Configuration: x64
Version: 9.0.30729.6161 (Actual $Version data in registry: 0x9007809 [DWORD])
डायरेक्ट डाउनलोड URL: https://download.microsoft.com/download/2/d/6/2d61c766-107b-409d-8fba-c39e61ca08e8/vcredist_x64.exe
Microsoft Visual C++ 2008 Redistributable - x86 9.0.30729.6161 (SP1)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\6E815EB96CCE9A53884E7857C57002F0
Configuration: x86
Version: 9.0.30729.6161 (Actual $Version data in registry: 0x9007809 [DWORD])
डायरेक्ट डाउनलोड URL: https://download.microsoft.com/download/d/9/dd9a82d0-52ef-40db-8dab-795376989c03/vcredist_x86.exe
Microsoft Visual C++ 2010 Redistributable (x64)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\1926E8D15D0BCE53481466615F760A7F
Configuration: x64
Version: 10.0.40219.325
डायरेक्ट डाउनलोड URL: https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x64.exe
Microsoft Visual C++ 2010 Redistributable (x86)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\1D5E3C0FEDA1E123187686FED06E995A
Configuration: x86
Version: 10.0.40219.325
डायरेक्ट डाउनलोड URL: https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe
Microsoft Visual C++ 2012 Redistributable (x64)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Dependencies\{ca67548a-5ebe-413a-b50c-4b9ceb6d66c6}
Configuration: x64
Version: 11.0.61030.0
डायरेक्ट डाउनलोड URL: https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_b64.exe
Microsoft Visual C++ 2012 Redistributable (x86)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Dependencies\{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}
Configuration: x86
Version: 11.0.61030.0
डायरेक्ट डाउनलोड URL: https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_b86.exe
संस्करण चेतावनी : प्रति उपयोगकर्ता वाई हा ली के निष्कर्ष, "... VC ++ 2012 अद्यतन 4 ( 11.0.61030.0
) के साथ आने वाले बायनेरिज़ 11.0.60610.1
में ATL और MFC बायनेरिज़ के लिए संस्करण है , और 11.0.51106.1
बाकी सब के लिए, जैसे msvcp110.dll और msvcp110.dll । .. "
Microsoft Visual C++ 2013 Redistributable (x64)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Dependencies\{050d4fc8-5d48-4b8f-8972-47c82c46020f}
Configuration: x64
Version: 12.0.30501.0
डायरेक्ट डाउनलोड URL: https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x64.exe
Microsoft Visual C++ 2013 Redistributable (x86)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Dependencies\{f65db027-aff3-4070-886a-0d87064aabb1}
Configuration: x86
Version: 12.0.30501.0
डायरेक्ट डाउनलोड URL: https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x86.exe
विकल्प के रूप में 2015-2019 बंडल का उपयोग करने पर विचार करें
Microsoft Visual C++ 2015 Redistributable (x64) - 14.0.24215
Registry Key: HKLM\SOFTWARE\Classes\Installer\Dependencies\{d992c12e-cab2-426f-bde3-fb8c53950b0d}
Configuration: x64
Version: 14.0.24215.1
डायरेक्ट डाउनलोड यूआरएल: https://download.microsoft.com/download/6/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x64.exe
Microsoft Visual C++ 2015 Redistributable (x86) - 14.0.24215
Registry Key: HKLM\SOFTWARE\Classes\Installer\Dependencies\{e2803110-78b3-4664-a479-3611a381656a}
Configuration: x86
Version: 14.0.24215.1
डायरेक्ट डाउनलोड URL: https://download.microsoft.com/download/6/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x86.exe
विकल्प के रूप में 2015-2019 बंडल का उपयोग करने पर विचार करें
कैविएट : या तो एक नया 2017 रजिस्ट्री सम्मेलन का उपयोग किया जा रहा है, या इसे अंतिम रूप नहीं दिया गया है, फिर भी। जैसा कि मैं अनुमान लगा रहा हूं कि सबसे ऊपरी कुंजी:
[HKEY_CLASSES_ROOT\Installer\Dependencies\,,amd64,14.0,bundle]
और
[HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle]
परिवर्तन के अधीन हैं, या कम से कम अलग-अलग नेस्टेड GUID हैं, मैं एक GUID के साथ समाप्त होने वाली कुंजी का उपयोग करने जा रहा हूं।
Microsoft Visual C++ 2017 Redistributable (x64) - 14.16.27012
Registry Key: [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x64,amd64,14.16,bundle\Dependents\{427ada59-85e7-4bc8-b8d5-ebf59db60423}]
Configuration: x64
Version: 14.16.27012.6
डायरेक्ट डाउनलोड URL: https://download.visualstudio.microsoft.com/download/pr/9fbed7c7-7012-4cc0-a0a3-a541f51981b5/e7eec152788444444e26d7e32cef34a34c/vc_redist.x64.exe
Microsoft Visual C++ 2017 Redistributable (x86) - 14.16.27012
Registry Key: [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x86,x86,14.16,bundle\Dependents\{67f67547-9693-4937-aa13-56e296bd40f6}]
Configuration: x86
Version: 14.16.27012.6
डायरेक्ट डाउनलोड URL: https://download.visualstudio.microsoft.com/download/pr/d0b808a8-aa78-4250-8e54-49b8c23f7328/9c5e65320555586367ee61aafb3313c95/vc_redist.x86.exe
कैविएट : विजुअल C ++ 2019 के लिए एक और नया रजिस्ट्री कन्वेंशन का उपयोग किया जा रहा है। विजुअल C ++ 2019 के लिए एक स्टैंडअलोन इंस्टॉलर भी नहीं दिखता है, केवल यह बंडल इंस्टॉलर है जो 2019 के माध्यम से विजुअल C ++ 2015 है।
14.21.27702
Microsoft Visual C++ 2015-2019 Redistributable (x64) - 14.21.27702
Registry Key: [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x64,amd64,14.21,bundle\Dependents\{f4220b74-9edd-4ded-bc8b-0342c1e164d8}]
Configuration: x64
Version: 14.21.27702
डायरेक्ट डाउनलोड URL: https://download.visualstudio.microsoft.com/download/pr/9e04d214-5a9d-4515-9960-3d71398d98c3/1e1e62ab57bbbbbb5151e8ce88f040be/vc_redist.x64.exe
Microsoft Visual C++ 2015-2019 Redistributable (x86) - 14.21.27702
Registry Key: [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x86,x86,14.21,bundle\Dependents\{49697869-be8e-427d-81a0-c334d1d14950}]
Configuration: x86
Version: 14.21.27702
डायरेक्ट डाउनलोड URL: https://download.visualstudio.microsoft.com/download/pr/c8edbb87-c7ec-4500-a461-71e8912d25e9/99ba493d660599090bb8b3211d2cae4/vc_redist.x86.exe
14.22.27821
Microsoft Visual C++ 2015-2019 Redistributable (x86) - 14.22.27821
Registry Key: [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x86,x86,14.22,bundle\Dependents\{5bfc1380-fd35-4b85-9715-7351535d077e}]
Configuration: x86
Version: 14.22.27821
डायरेक्ट डाउनलोड URL: https://download.visualstudio.microsoft.com/download/pr/0c1cfec3-e028-4996-8bb7-0c751ba41e32/1abed1573f36075ffdfc538a2af00d37/vc_redist.x86.exe
Microsoft Visual C++ 2015-2019 Redistributable (x86) - 14.22.27821
Registry Key: [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x64,amd64,14.22,bundle\Dependents\{6361b579-2795-4886-b2a8-53d5239b6452}]
Configuration: x64
Version: 14.22.27821
डायरेक्ट डाउनलोड URL: https://download.visualstudio.microsoft.com/download/pr/cc0046d4-e7b4-45a1-bd46-b1c079191224/9c4042a4c6e6d1f66cf4ccc4d129e9/vc_redist.x64
चांगेलोग :
१ ९ अगस्त २०१ ९ - २०१५-२०१५ के बंडल संस्करण का नया संस्करण जोड़ा गया
१३ जून २०१ ९ - २०१५-२०१९ के बंडल संस्करण के लिए एक नया खंड जोड़ा गया 14.21.27702
और २०१५ और २०१ 19th के छोटे नोटों को जोड़ा गया जिसके उपयोग पर विचार किया गया। एक विकल्प के रूप में नया बंडल।
14 दिसंबर, 2018 - 9.0.30729.6161
जिम वोलफ के निष्कर्षों के अनुसार सर्विस पैक 1 के अपडेट के
लिए MSVC2008 को अपडेट किया गया 27 नवंबर, 2018 - MSVC2017 बनाम 14.16
सितंबर 12, 2018 के लिए अपडेटेड जानकारी - वर्जन हाऊ ली के निष्कर्षों में
24 अगस्त 2012 को अपडेट किए गए संस्करण कैविएट को 24 अगस्त। 2018 - अपडेटेड 2017 का संस्करण 14.15.26706, अपडेटेड विजुअल C ++ निर्भरताएँ VS 2017 15.8.1 के साथ पैक किया गया
16 मई, 2018 - अपडेट किया गया 2017 का संस्करण 14.14.26405.0 के लिए नई C ++ 2017 प्रविष्टि
8 सितंबर, 2017 के रूप में - अपडेट किया गया 2017 का संस्करण 14.11.25325.0 के लिए नए विज़ुअल C ++ 2017 प्रविष्टि
7 अप्रैल, 2017 के रूप में - अपडेट किया गया 2017 का संस्करण 14.10 .25008.0 नए विज़ुअल C ++ 2017 प्रविष्टि के रूप में
24 अक्टूबर, 2016 - 14.0.24215.1
अगस्त 18, 2016 के लिए 2015 के संस्करण की जानकारी अपडेट की गई - 14.0.24212
मई 27, 2016 के लिए 2015 के संस्करण की जानकारी - MSVC2015 अपडेट 2 के बारे में अद्यतन जानकारी
अगर इनमें से कोई भी पुराना हो जाता है, तो कृपया मुझसे यहां संपर्क करें।
[HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle\Dependents\{$GUID}
और[HKEY_CLASSES_ROOT\Installer\Dependencies\,,amd64,14.0,bundle\Dependents\{$GUID}
[HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x86,x86,14.16,bundle] [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x64,amd64,14.16,bundle]
प्रयत्न
HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\11.0
एक प्रारंभिक बिंदु के रूप में। मैं इसे वीसी ++ 11 (वीएस 2012) रनटाइम स्थापित करने के लिए एक चेक के रूप में उपयोग कर रहा हूं।
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DevDiv\VC\Servicing\11.0\RuntimeMinimum
आप इस रजिस्ट्री स्थान में Installed
होने के लिए मूल्य की जांच कर सकते हैं 1
: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes\x86
64-बिट सिस्टम पर। कोड में जिसके परिणामस्वरूप रजिस्ट्री कुंजी को एक्सेस किया जाएगा HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86
। की अनुपस्थिति पर ध्यान दें Wow6432Node
।
32-बिट सिस्टम पर रजिस्ट्री बिना समान है Wow6432Node
:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC
लेकिन मेरे पास Runtimes
चाबी नहीं है । मेरे पास डेव के उत्तर की कुंजी है HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\11.0
।
विजुअल C ++ के साथ शिप किए गए बूटस्ट्रैपर पैकेज मेनिफ़ेस्ट में कोई इंस्टॉलचेक तत्व नहीं है। यदि आप इसे किसी शर्त के रूप में सेट करते हैं, तो Microsoft हमेशा स्थापित करना चाहता है।
बेशक आप अभी भी MsiQueryProductState को यह जांचने के लिए कॉल कर सकते हैं कि क्या VC Redist पैकेज MSI के माध्यम से स्थापित किया गया है, पैकेज कोड को चलाकर पाया जा सकता है
wmic product get
कमांड लाइन पर, या यदि आप पहले से ही wmic पर हैं: root \ cli, चलाएँ
product where "Caption like '%C++ 2012%'"
इस सरल सवालों का जवाब दुर्भाग्य से एक साधारण नहीं है, लेकिन सभी प्रणालियों के 100% में काम कर रहा है, और यहां तक कि कई .net चौखटे के लिए विस्तार योग्य है।
जटिलता इस तथ्य से आती है कि वहाँ (और थे) कई वीसी रनटाइम्स संशोधन हैं जो इस मामले को जन्म दे सकते हैं कि हालांकि वीसी 10 रनटाइम्स स्थापित किए गए थे, उनका निर्माण संख्या हाल ही में पर्याप्त नहीं था इसलिए आपका एक्सई शुरू नहीं होगा जब तक कि आप या तो बहुत स्थापित न करें सटीक रनटाइम्स जो आपको चाहिए या नए रनटम्स में से एक जो इसके साथ चलने के लिए एक ही प्रमुख संस्करण के लिए इस और पिछले संस्करणों को सक्षम करता है (साइड-बाय-साइड नरक)। इसके अलावा, यदि आपके पास 64 बिट EXE है, तो आपको 32 और 64 बिट रनटाइम दोनों की जांच करनी होगी।
उस ने कहा, यह निर्धारित करने का एकमात्र विश्वसनीय तरीका है कि आपके EXE के लिए रनटाइम स्थापित हैं या नहीं , EXE को चलाने का प्रयास करें - या एक अन्य EXE जो आपके मुख्य EXE के समान सेटिंग्स के साथ बनाया गया है और जिसका एकमात्र उद्देश्य कुछ भी नहीं है। बस चलाएं (जिसका अर्थ है कि रनटाइम्स स्थापित हैं) या चलाने में विफल (जब स्थापित नहीं)।
मैंने एक इंस्टॉलर के लिए निम्नलिखित किया था जिसमें वीसी 10 32 और 64 बिट रनटाइम स्थापित करने की आवश्यकता थी: इंस्टॉलर सभी डमी एक्सई को लॉन्च करने का प्रयास करता है और यदि यह सफल होता है, तो इसी रनटाइम को स्थापित किया जाना माना जाता है। यह 32/64 बिट परिदृश्य को भी हल करता है।
यह, वैसे, यह निर्धारित करने के लिए भी काम करता है कि क्या उचित .net फ्रेमवर्क स्थापित किया गया है, जो कि विंडोज 8 और 10 में बहुत मुश्किल है, क्योंकि डाउनलोड करने योग्य अंतर्निहित .net 3.5 समर्थन भी .net संस्करण 3.0 और 2.0 का समर्थन करता है - वहाँ। इन के लिए कोई रजिस्ट्री प्रविष्टियाँ नहीं हैं। (और इससे भी बदतर, आप यहां मानक फ्रेमवर्क इंस्टॉलर का उपयोग भी नहीं कर सकते हैं, आपको अंतर्निहित समर्थन का उपयोग करना होगा और इसे विंडोज के माध्यम से डाउनलोड करना होगा, या अपने ऐप को .net 4 के साथ पुनर्निर्माण करना चाहिए, लेकिन यह एक और कहानी है)।
C ++ डमी EXE को निम्न कोड के साथ एक परियोजना का उपयोग करके बनाया जा सकता है (और यदि आवश्यक हो तो 64 बिट कॉन्फ़िगरेशन में एक और):
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
एक साझा DLL में MFC का उपयोग करने के लिए MFC का उपयोग प्रोजेक्ट के गुण सेट करना याद रखें । निष्पादनयोग्य आकार में लगभग 4KB होगा - एक निश्चित परिणाम के लिए भुगतान करने के लिए एक छोटी सी कीमत।
अपने उपयोगकर्ताओं को एक अच्छा इंस्टॉलेशन अनुभव देने के लिए, आप निम्न कार्य कर सकते हैं ( NSIS के लिए नमूना कोड ):
Function TryLaunchApplication
Pop $1 ; pathname
nsExec::Exec $1
Pop $0
${If} $0 == "error"
${OrIf} $0 != 0
Push 0
${Else}
Push 1
${EndIf}
FunctionEnd
और इसे एक फ़ंक्शन में कॉल करें, उदाहरण के लिए CheckRuntimes
Function CheckRuntimes
; Try to execute VC++ 10 application (32 bit)
Push "Vc10RuntimeCheckerApp.exe"
Call TryLaunchApplication
Pop $Vc10RuntimesFound
; Add 64 bit check if required.
; Remember to try running the 64 bit EXE only on a 64 bit OS,
; which requires further checks.
; Try to execute .net application
Push "DotNetRuntimeCheckerApp.exe"
Call TryLaunchApplication
Pop $DotNetFrameworkFound
FunctionEnd
फिर रनटाइम चेक लॉन्च करें जैसे कि वेलकम पेज को छोड़ कर परिणाम को कैश करें, इसलिए आपको हर बार उपयोगकर्ता को "बैक" और "नेक्स्ट" बटन पर क्लिक करने की दोबारा जांच नहीं करनी होगी।
इसके बाद, इंस्टॉल ट्री में एक रीड-ओनली सेक्शन बनाएं और इसे एक फंक्शन पर प्री-सेलेक्ट करें या अनसेलेक्ट करें, जो कंपोनेंट पेज दिखाए जाने से पहले निष्पादित हो ।
यह सुनिश्चित करेगा कि प्रत्येक लापता रनटाइम घटक की स्थापना अनिवार्य है, और अगर यह पहले से मौजूद है तो छोड़ दिया जाता है।
चूंकि विजुअल स्टूडियो 2010 और बाद में WinSxS का उपयोग करना बंद कर दिया गया है, इसलिए यह केवल% windir% \ system32 \ msvcr110.dll की जाँच करने के लिए पर्याप्त हो सकता है। यदि आप सत्यापित करना चाहते हैं कि आपके पास एक नया पर्याप्त संस्करण है, तो आप जांच सकते हैं कि फ़ाइल संस्करण 11.0.50727.1 (VS2012 RTM) या 11.0.51106.1 (VS2012 अपडेट 1) है या नहीं।
11.0.61030.0
) के साथ आने वाले बायनेरिज़ 11.0.60610.1
में ATL और MFC बायनेरिज़ के लिए संस्करण है , और 11.0.51106.1
बाकी सब के लिए, जैसे msvcp110.dll और msvcr110.dll। यकीन नहीं है कि क्यों। आप इसकी पुष्टि कर सकते हैं (विंडोज 10 मशीनों पर मैंने इसका परीक्षण किया है) पर जाकर C:\ProgramData\Package Cache\{BD95A8CD-1D9F-35AD-981A-3E7925026EBB}v11.0.61030\packages\vcRuntimeMinimum_x86
और C:\ProgramData\Package Cache\{B175520C-86A2-35A7-8619-86DC379688B9}v11.0.61030\packages\vcRuntimeAdditional_x86
फिर .cab फाइलों की फाइलों का निरीक्षण किया।
मैं इस सवाल पर आया था कि वाईएक्सएक्स द्वारा बनाए गए एमएसआई इंस्टॉलर के एक भाग के रूप में विजुअल सी ++ पुनर्वितरण के लिए जाँच के संदर्भ में उत्तर की तलाश में था।
मुझे यह पसंद नहीं आया कि संस्करण और ऑपरेटिंग सिस्टम के साथ GUID का परिवर्तन कैसे हुआ, इसलिए मैंने विजुअल C ++ के पुनर्वितरण के लिए जाँच करने के लिए C # में लिखी गई एक कस्टम क्रिया का निर्माण किया।
नीचे सब कुछ विशेष रूप से विजुअल C ++ 2015 Redistributable (x64) के लिए है, लेकिन इसे किसी भी संस्करण के लिए आसानी से संशोधित किया जा सकता है।
using Microsoft.Deployment.WindowsInstaller;
using Microsoft.Win32;
namespace CustomActions
{
public class DependencyChecks
{
[CustomAction]
public static ActionResult IsVC2015RedistInstalled(Session session)
{
session.Log("Begin Visual C++ 2015 Redistributable installation check.");
var dependenciesKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Classes\\Installer\\Dependencies");
foreach(var subKey in dependenciesKey.GetSubKeyNames())
{
var dependency = dependenciesKey.OpenSubKey(subKey);
var displayName = (string)dependency.GetValue("DisplayName");
if(displayName != null)
{
if (displayName.Contains("Microsoft Visual C++ 2015 Redistributable (x64)"))
{
session.Log("Visual C++ 2015 Redistributable is installed.");
return ActionResult.Success;
}
}
}
session.Log("Visual C++ 2015 Redistributable is not installed.");
session.Message(InstallMessage.Error, new Record(1, "This application requires Visual C++ 2015 Redistributable. Please install, then run this installer again. https://www.microsoft.com/en-us/download/details.aspx?id=53587"));
return ActionResult.Failure;
}
}
}
फिर wxs फ़ाइल में
<Binary Id='VC2015RedistCheck' SourceFile='!(wix.ResourcesDir=resources)\CustomActions.CA.dll'/>
<CustomAction
Id='VC2015RedistCheckAction'
Execute='immediate'
BinaryKey='VC2015RedistCheck'
DllEntry="IsVC2015RedistInstalled"
Return='check'/>
<InstallExecuteSequence>
<Custom Action='VC2015RedistCheckAction' After='InstallInitialize'/>
</InstallExecuteSequence>
संपादित करें मैं एक कस्टम क्रिया बनाने और उपयोग करने पर कुछ मूल जानकारी के साथ इस उत्तर को अपडेट कर रहा हूं।
विजुअल स्टूडियो 2017 में वाईएक्स टूलसेट विजुअल स्टूडियो 2017 एक्सटेंशन के साथ कस्टम एक्शन बनाने के लिए, मैंने कस्टम एक्शन (वाईएक्स वी 3 के लिए सी # कस्टम एक्शन प्रोजेक्ट) बनाने के लिए प्रोजेक्ट टेम्पलेट का उपयोग किया।
मैंने जेनरेट की गई परियोजना की जाँच की और ऐसा लगा कि इस लेख की शुरुआत में पहले से ही बदलाव सूचीबद्ध हैं: https://www.codeproject.com/Articles/132918/Creating-Custom-Action-for-WIX-Written-in-Managed इसलिए मैंने उस लेख को अनुभाग में उठाया Adding Custom Action to the Installer
और कुछ ट्विक्स के साथ इसका अनुसरण किया।
एक अन्य चीज जो मैंने किया था वह .NET फ्रेमवर्क का संस्करण बदल गया था जो कि परियोजना 3.5 के खिलाफ बनाया गया है।
मुझे यह वास्तव में उपयोगी नहीं लगा, लेकिन आप http://wixtoolset.org/documentation/manual/v3/wixdev/extensions/authoring_custom_actions.html भी देख सकते हैं
मेरे लिए इस स्थान ने काम किया: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ DevDiv \ vc \ Servicing \ 11.0 \ RuntimeMinimum \ संस्करण
पैकेज स्थापित करने के बाद आपके पास क्या संस्करण है और अपने इंस्टॉलर में एक शर्त के रूप में उपयोग करें। (मेरा कुलपति स्थापित करने के बाद 11.0.50727 पर सेट है)।
बस कंट्रोल पैनल> प्रोग्राम्स और फीचर्स पर जाएं, और वे सभी वहां सूचीबद्ध हैं।
मैं कोई विशेषज्ञ नहीं हूं और यह उत्तर उन लोगों की तुलना में बहुत सरल है जो लोग उत्तर दे रहे हैं (रजिस्ट्री की जाँच कर रहे हैं), इसलिए मुझे यकीन नहीं है कि यह सही उत्तर है, लेकिन इसने मेरे लिए चाल चली।
मैंने InnoSetup के साथ ऐसा करने का मुकदमा किया है।
मैंने रजिस्ट्री कुंजी के अस्तित्व की जाँच की:
HKLM\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes
यदि स्थापना रद्द की जाती है, तो यह मौजूद नहीं है। यदि स्थापित है, यह मौजूद है।
वैसे, यह Wow6432Node में भी हो सकता है:
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes
MsiQueryProductState के माध्यम से उत्पाद के लिए स्थापित स्थिति की जाँच करना रजिस्ट्री की सीधे जाँच करने के बराबर है, लेकिन आपको अभी भी ProductCode के लिए GUID की आवश्यकता है ।
जैसा कि कहीं और उल्लेख किया गया है, इन दृष्टिकोणों के साथ एक खामी यह है कि प्रत्येक अद्यतन का अपना उत्पादकोड है!
शुक्र है, MSI एक UpgradCode प्रदान करता है जो उत्पादों के एक 'परिवार' की पहचान करता है । आप इस जानकारी को निकालने के लिए किसी एक MSI को खोलने के लिए ओर्का का उपयोग कर सकते हैं। उदाहरण के लिए, VS2015 के पुनर्वितरण के लिए अपग्रेडकोड है{65E5BD06-6392-3027-8C26-853107D3CF1A}
उस UpgradCode के लिए सभी उत्पाद ID प्राप्त करने के लिए आप MsiEnumRelatedProducts का उपयोग कर सकते हैं । व्यवहार में, चूंकि प्रत्येक रिडिस्ट अपडेट पिछले एक को बदल देता है, इसलिए यह केवल एक {B5FC62F5-A367-37A5-9FD2-A6E137C0096F}
उत्पादकोड प्राप्त करेगा - जैसे कि VS2015 अपडेट 28686।
भले ही, आप तब MsiGetProductInfo के माध्यम से संस्करण की जांच कर सकते हैं (productCode, INSTALLPROPERTY_VERSIONSTRING, ...) या इसी तरह के कार्यों को आप जिस संस्करण से चाहते हैं उसकी तुलना कर सकते हैं, जैसे कि समतुल्य या बाद के संस्करण के लिए जाँच करें।
ध्यान दें कि एक सी ++ आवेदन के भीतर, आप भी उपयोग कर सकते हैं _VC_CRT_MAJOR_VERSION
, _VC_CRT_MINOR_VERSION
, _VC_CRT_BUILD_VERSION
यदि आप #include <crtversion.h>
- इस तरह से आप की गणना सीआरटी संस्करण है कि आपके द्विआधारी साथ बनाया गया था निर्धारित कर सकते हैं।
इस PowerShell कोड को ट्रिक करना चाहिए
Get-ItemProperty
HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Format-Table –AutoSize
मुझे उसी चीज की जरूरत थी, और हालांकि AFAIK यह प्रोग्रामेटिक रूप से नहीं किया जा सकता है, यह मेरे लिए काम करता है।
मैं अभी शुरू हुआ -> एक प्रोग्राम को अनइंस्टॉल करता हूं, और जब तक मुझे VC ++ पुनर्वितरण नहीं मिला, तब तक नीचे स्क्रॉल किया गया, जिसमें एक संस्करण संख्या शामिल है। संस्करण संख्या को देखते हुए, मुझे बताया कि यह VS2012 SP1 का है।
पुराना प्रश्न लेकिन यहाँ वह दृष्टिकोण है जिसका उपयोग हमने विजुअल स्टूडियो 2005 के बाद से सफलता के साथ किया है। मैंने अभी इसे विजुअल स्टूडियो 2012 अपडेट 4 का उपयोग करके परीक्षण किया है (क्योंकि हम अंततः 2010 से 2012 तक अपने सॉफ़्टवेयर को अपडेट कर रहे हैं)।
चूंकि दृश्य C ++ Redistributable संकुल अपने अनइंस्टालर को विंडोज़ के साथ पंजीकृत करता है (इसलिए यह कंट्रोल पैनल "प्रोग्राम्स और फीचर्स" सूची में दिखाई देता है), हम केवल रजिस्ट्री में अनइंस्टालर कुंजी के प्रदर्शन नाम की जांच करते हैं।
यहाँ प्रासंगिक NSIS कोड है:
ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}\" "DisplayName"
StrCmp $0 "Microsoft Visual C++ 2012 Redistributable (x86) - 11.0.61030" vs2012redistInstalled
DetailPrint "Microsoft Visual C++ 2012 Update 4 Redistributable not found!"
DetailPrint "Downloading from www.mywebsite.com"
; insert applicable download code here
ExecWait '"<downloaded redist exe>" /promptrestart /passive'
vs2012redistInstalled:
ध्यान दें कि चूंकि हमारा इंस्टॉलर 32bit का एक्सई है, इसलिए विंडोज़ यह निर्धारित करता है कि रजिस्ट्री कुंजी वास्तव में उपरोक्त स्थान के बजाय वर्चुअलाइज्ड Wow6432Node में है, इसलिए उपरोक्त कोड 64 बिट और 32 बिट दोनों विंडो पर काम करता है, बिना इन चाबियों को स्पष्ट रूप से जांचे बिना।
यह भी ध्यान दें कि उपरोक्त कोड को वीसी ++ रेडिस्ट के एक अलग संस्करण में अपडेट करने के लिए, बस रजिस्ट्री कुंजी पथ में GUID और जो भी आपको चाहिए, प्रदर्शन नाम बदलें।
हालांकि यह अनुशंसित तरीका नहीं हो सकता है, इसने पिछले 10 वर्षों में 10,000 से अधिक मशीनों पर काम किया है। 2005, 2010, 2010sp1 और अब 2012u4 के लिए रिडिस्ट का उपयोग करके Windows 10 के माध्यम से XP / XP64 से विंडोज़ के हर स्वाद को चलाने के लिए।
मैं के Installed
मूल्य की जाँच करेगा
HKLM\SOFTWARE\[WOW6432Node]\Microsoft\Windows\CurrentVersion\Uninstall\{VCRedist_GUID}
चाभी
VC++ 2012 (x86)
है{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}
WOW6432Node
VC++ redist
उत्पाद के आधार पर मौजूद होगा या नहीं/reg:32
विंडोज x64 पर कुंजी की जांच के लिए अधिकांश लोगों को क्या याद रखना आवश्यक है।
इस विषय पर Microsoft सहायता आलेख देखें ।
यहाँ एक स्क्रिप्ट है जो दृश्य स्टूडियो 2012 अद्यतन 4 के लिए विजुअल C ++ पुनर्वितरण के लिए सही तरीके से जांचने का तरीका प्रदर्शित करती है।
@ECHO OFF
:Author
REM "CREATED BY WAR59312"
REM "FEB 7th 2017"
REM Clear Screen
CLS
TITLE Detect Visual C++ 2012 Redistributables
REM This Batch Script Detects If Visual C++ Redistributable for Visual Studio 2012 Update 4 Is Installed
:DetectWindowsOS
REM Are We Running On x86 Or x64
IF NOT DEFINED PROCESSOR_ARCHITEW6432 (
IF %PROCESSOR_ARCHITECTURE% EQU x86 (
REM Windows Is x86
GoTo Check32Bit
) ELSE (
REM Windows Is x64
SET NeededFor64BitOnly=/reg:32
GoTo Check64Bit
)) ELSE (
REM Windows Is Unknown But Assume x64 To Be Safe
SET NeededFor64BitOnly=/reg:32
GoTo Check64Bit
)
:Check64Bit
REM Checks If Visual C++ 64Bit Redistributable for Visual Studio 2012 Update 4 Is Installed
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x64" /v "Version" %NeededFor64BitOnly% 2>NUL^ | (
FIND "v11.0.61030.00" >NUL
) && (
ECHO.
ECHO 64bit Visual C++ Redistributable for Visual Studio 2012 Update 4 Is Installed
ECHO.
GoTo Check32Bit
) || (
ECHO.
ECHO 64bit Visual C++ Redistributable for Visual Studio 2012 Update 4 Is NOT Installed
ECHO.
GoTo Check32Bit
)
:Check32Bit
REM Checks If Visual C++ 32Bit Redistributable for Visual Studio 2012 Update 4 Is Installed
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86" /v "Version" %NeededFor64BitOnly% 2>NUL^ | (
FIND "v11.0.61030.00" >NUL
) && (
ECHO.
ECHO 32bit Visual C++ Redistributable for Visual Studio 2012 Update 4 Is Installed
) || (
ECHO.
ECHO 32bit Visual C++ Redistributable for Visual Studio 2012 Update 4 Is NOT Installed
)
:END
ECHO.
PAUSE
EXIT
पटकथा पटकथा समाधान:
@KayleeFrye_onDeck से उत्तर में जानकारी के आधार पर
मैंने एक पॉवरशेल स्क्रिप्ट बनाई है जो उपयोगकर्ता द्वारा निर्दिष्ट संस्करणों की जांच और स्थापित करता है, मैंने इसके साथ व्यापक परीक्षण नहीं किया है, लेकिन मेरे अपने CI (कंटीन्यूअस इंटीग्रेशन) परिदृश्य के लिए यह पूरी तरह से काम करता है।
पूरी स्क्रिप्ट और जानकारी github पर
मैं जिस दृष्टिकोण का उपयोग करता था, वह यहां दी गई जानकारी के आधार पर रजिस्टरों की जांच पर आधारित था। निम्नलिखित वह स्क्रिप्ट है जो स्क्रिप्ट करती है:
function Test-RegistryValue {
param (
[parameter(Mandatory=$true)]
[ValidateNotNullOrEmpty()]$Path,
[parameter(Mandatory=$true)]
[ValidateNotNullOrEmpty()]$Value
)
try {
Get-ItemProperty -Path "$($Path+$Value)" -ErrorAction Stop | Out-Null
return $true
}
catch {
return $false
}
}
जाँच / डाउनलोड / चुपचाप स्थापित $redistInfo
जिसके आधार पर kayleeFrye_onDeck's से संकलित जानकारी शामिल है।
$redistInstalled = Test-RegistryValue -Path $redistInfo.RegPath -Value $redistInfo.RegValue
if($redistInstalled -eq $False) {
Invoke-WebRequest -Uri $redistInfo.DownloadUrl -OutFile $downloadTargetPath
Start-Process -FilePath $downloadTargetPath -ArgumentList "$($redistInfo.SilentInstallArgs)" -Wait -NoNewWindow | Wait-Process
}
पूरी स्क्रिप्ट और अधिक जानकारी जीथूब पर मिल सकती है
किसी का भी योगदान करने के लिए स्वागत है, अगर मेरे पास समय है तो मैं स्क्रिप्ट का अधिक व्यापक परीक्षण करूंगा और नए पैकेज जोड़ने की कोशिश करता रहूंगा क्योंकि यहां जानकारी जोड़ी जाती है।
वीसी 2012 के लिए सभी रजिस्ट्री मान प्राप्त करना कठिन है, इसलिए मैंने एक छोटा फ़ंक्शन लिखा है जो सभी निर्भरता से गुजरता है और निर्दिष्ट संस्करण पर मेल खाता है।
public static bool IsVC2012Installed()
{
string dependenciesPath = @"SOFTWARE\Classes\Installer\Dependencies";
using (RegistryKey dependencies = Registry.LocalMachine.OpenSubKey(dependenciesPath))
{
if (dependencies == null) return false;
foreach (string subKeyName in dependencies.GetSubKeyNames().Where(n => !n.ToLower().Contains("dotnet") && !n.ToLower().Contains("microsoft")))
{
using (RegistryKey subDir = Registry.LocalMachine.OpenSubKey(dependenciesPath + "\\" + subKeyName))
{
var value = subDir.GetValue("DisplayName")?.ToString() ?? null;
if (string.IsNullOrEmpty(value)) continue;
if (Regex.IsMatch(value, @"C\+\+ 2012")) //here u can specify your version.
{
return true;
}
}
}
}
return false;
}
निर्भरता:
using System.Text.RegularExpressions;
using Microsoft.Win32;
using System.Linq;
आप रजिस्ट्री में खोज सकते हैं। आमतौर पर मेरे पास vs2012 नहीं है, लेकिन मेरे पास vs2010 है।
3 प्लेटफ़ॉर्म पैकेज में से प्रत्येक के लिए 3 अलग (लेकिन बहुत समान) रजिस्ट्री कुंजियाँ हैं। प्रत्येक कुंजी में एक DWORD मान है जिसे 1 के मान के साथ "इंस्टॉल किया गया" कहा जाता है।
HKLM \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ कुलपति \ VCRedist \ x86
HKLM \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ कुलपति \ VCRedist \ x64
HKLM \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ कुलपति \ VCRedist \ ia64
आप उसके लिए रजिस्ट्री फ़ंक्शन का उपयोग कर सकते हैं ......
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\VC\VCRedist\...