ตรวจสอบว่ามีการติดตั้ง Visual C ++ Redistributable สำหรับ Visual Studio 2012 หรือไม่


109

จะตรวจสอบได้อย่างไรว่ามีการติดตั้ง Visual C ++ Redistributable สำหรับ Visual Studio 2012 หรือไม่

ฉันลองใช้ Google แล้วและไม่มีใครถามคำถามนี้เลยแปลกใจ!


1
ทำไมไม่ลบการอ้างอิงนั้นออกโดยการตั้งค่าไลบรารีรันไทม์ใน C ++> การสร้างโค้ดเป็นมัลติเธรด [debug] แทนที่จะเป็น dll [debug] แบบมัลติเธรด ฉันเพิ่งแก้ไขปัญหาของการติดตั้ง runtime redist โดยเพียงแค่ลบ dependecy ออก
Cem Kalyoncu

ฉันค้นพบวิธีตรวจจับแพ็กเกจโดยการลองผิดลองถูก ฉันหวังว่าจะมีกระสุนวิเศษ แต่ถ้ามีฉันก็ยังไม่พบ ฉันมีคำตอบอยู่ด้านล่างสำหรับผู้ทำซ้ำบางคนที่ดูเหมือนว่าจะได้ผล 100% ในการช่วยเหลือพวกเขาส่วนใหญ่ในปัจจุบัน
kayleeFrye_onDeck

3
โปรดพิจารณาเปลี่ยนคำตอบที่ยอมรับโดย kayleeFrye_onDeck ฉันใช้เวลาหลายปีในการมองหาวิธีการที่เชื่อถือได้และดูเหมือนจะเป็นวิธีเดียวฉันคิดว่าด้วยคำตอบที่ไม่น่าเชื่อถืออื่น ๆ ทั้งหมดนี้จะช่วยให้ผู้คนจำนวนมากค้นหาข้อมูลที่ถูกต้องได้
musefan

ดูเหมือนว่าจะมีการอัปเดตสำหรับรันไทม์ Visual Studio 2017: 14.10.V25017 ลิงก์: go.microsoft.com/fwlink/?LinkId=746572คุณสามารถอัปเดตค่ารีจิสทรีได้หรือไม่
karel vergauwe

คำตอบ:


172

ขึ้นอยู่กับเวอร์ชันที่คุณใช้ คีย์ 2012 ทั้งสองนี้ทำงานได้ดีสำหรับฉันด้วยเวอร์ชันที่เกี่ยวข้องเพื่อดาวน์โหลดสำหรับอัปเดต 4 โปรดทราบว่าตำแหน่ง reg เหล่านี้บางส่วนอาจขึ้นอยู่กับระบบปฏิบัติการ ฉันรวบรวมข้อมูลนี้จากกล่องWindows 10 x64 ฉันจะดำเนินการต่อและถ่ายโอนเวอร์ชัน redist ทั้งหมดเหล่านี้และคีย์ reg ที่ฉันค้นหาเพื่อตรวจจับการติดตั้ง:


Visual C ++ 2005

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


Visual C ++ 2008

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/d/9/dd9a82d0-52ef-40db-8dab-795376989c03/vcredist_x86.exe


Visual C ++ 2010

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


Visual C ++ 2012

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_x64.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_x86.exe

รุ่นข้อแม้ : ผู้ใช้ต่อหวายฮาลี 's ค้นพบ" ...ไบนารีที่มาพร้อมกับ VC ++ 2012 ปรับปรุง 4 ( 11.0.61030.0) มีรุ่น11.0.60610.1สำหรับ ATL และไบนารีเอ็มเอฟและ11.0.51106.1สำหรับทุกอย่างอื่นเช่น msvcp110.dll และ msvcr110.dll.. "


Visual C ++ 2013

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


Visual C ++ 2015

ลองใช้บันเดิลปี 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

URL ดาวน์โหลดโดยตรง: https://download.microsoft.com/download/6/A/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/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x86.exe


Visual C ++ 2017

ลองใช้บันเดิลปี 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/e7eec15278b4473e26d7e32cef53a34c/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/9c5e6532055786367ee61aafb3313c95/vc_redist.x86.exe


Visual C ++ 2019 ( ชุด 2015-2019 )

Caveat : มีการใช้รูปแบบการลงทะเบียนใหม่สำหรับ Visual C ++ 2019 นอกจากนี้ดูเหมือนว่าจะไม่มีตัวติดตั้งแบบสแตนด์อโลนสำหรับ Visual C ++ 2019 มีเพียงตัวติดตั้งบันเดิลที่เป็น Visual C ++ 2015 ถึง 2019

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/1e1e62ab57bbb4bf5199e8ce88f040be/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/99ba493d660597490cbb8b3211d2cae4/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/1abed1573f36075bfdfc538a2af00d37/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/9c4042a4c2e6d1f661f4c58cf4d129e9/vc_redist.x64.exe


บันทึกการเปลี่ยนแปลง :
19 สิงหาคม 2019 - เพิ่มเวอร์ชันใหม่ของ 2015-2019 บันเดิลเวอร์ชัน
13 มิถุนายน 2019 - เพิ่มส่วนใหม่สำหรับเวอร์ชันบันเดิล 2015-2019 14.21.27702และเพิ่มโน้ตเล็ก ๆในส่วน 2015 และ 2017 เกี่ยวกับการพิจารณาการใช้งาน กลุ่มใหม่เป็นทางเลือก
14 ธันวาคม 2018 - อัปเดต MSVC2008 สำหรับการ9.0.30729.6161อัปเดตService Pack 1 ตามการค้นพบของ Jim Wolff
27 พฤศจิกายน 2018 - อัปเดตข้อมูลสำหรับ MSVC2017 v.1 14.16
กันยายน 12, 2018 - เพิ่มข้อแม้เวอร์ชันเป็น 2012 อัปเดต 4 ต่อการค้นพบของ Wai Ha Lee ใน
วันที่ 24 สิงหาคม 2018 - อัปเดตเวอร์ชัน 2017 สำหรับ 14.15.26706 การอ้างอิง Visual C ++ ที่อัปเดตพร้อมกับ VS 2017 15.8.1
16 พฤษภาคม 2018 - อัปเดตเวอร์ชัน 2017 สำหรับ 14.14.26405.0 เป็นรายการ C ++ 2017 ใหม่
เมื่อวันที่ 8 กันยายน 2017 - อัปเดตเวอร์ชัน 2017 สำหรับ 14.11.25325.0 เป็นรายการ Visual C ++ 2017 ใหม่
เมื่อวันที่ 7 เมษายน 2017 - อัปเดตเวอร์ชัน 14.10 ของ 2017 .25008.0 เป็นรายการ Visual C ++ 2017 ใหม่
เมื่อวันที่ 24 ตุลาคม 2559 - อัปเดตข้อมูลเวอร์ชันของปี 2015 สำหรับ 14.0.24215.1
18 สิงหาคม 2559 - อัปเดตข้อมูลเวอร์ชันของ 2015 สำหรับ 14.0.24212
27 พฤษภาคม 2559 - อัปเดตข้อมูลสำหรับ MSVC2015 อัปเดต 2

โปรดติดต่อฉันที่นี่หากสิ่งเหล่านี้ล้าสมัย


4
ลงตัวนี้ที่สุด นี่เป็นสิ่งเดียวที่ฉันพบว่าไม่ให้ผลบวกปลอมเมื่อติดตั้ง Visual Studio หรือถอนการติดตั้งรันไทม์
อา.

2
GUID ของ VS2015 ก่อนการอัปเดต 1 คือ {74d0e5db-b326-4dae-a6b2-445b9de1836e} เพื่อให้คุณสามารถใช้กลไกนี้ได้ สำหรับทุกการอัพเดทในอนาคต! การเปิดตัวอัพเดต 1 VCRedist ก่อนที่ติดตั้งอัปเดต 1 ทำให้ฉันเกิดข้อผิดพลาดดังนั้นฉันจะใช้คีย์ reg ตัวติดตั้ง VC ซึ่งดูเหมือนจะดีถ้าคุณใช้ VCRedist
GilesDMiddleton

4
น่าเสียดายที่สิ่งนี้ไม่มี VCREDIST 14.0 อัปเดต 2 - เราจะจัดการกับความเข้ากันได้ไปข้างหน้าได้อย่างไร (การตรวจจับเวอร์ชันรันไทม์เดียวกันที่ใหม่กว่าและประสบความสำเร็จ)
Shaun Wilson

2
@ManjunathBabu ฉันไม่เชื่อว่ามีเอกสารภายนอกใด ๆ เกี่ยวกับอนุสัญญารีจิสทรีสำหรับโปรแกรมติดตั้ง Visual C ++ ที่แจกจ่ายต่อได้ ฉันเพิ่งสังเกตว่าพวกเขาดูเหมือนจะทำตามบางสิ่งที่คล้ายกับโครงการในช่วงปี 2017 นี้แทนที่จะโยน GUID อื่นไปที่ไหนสักแห่งโดยไม่มีชื่อคีย์หลักที่มีความหมาย จนถึงตอนนี้พวกเขาได้ใช้ตำแหน่งเหล่านี้สำหรับตัวติดตั้งที่เปิดตัวทั้งหมดสำหรับปี 2017: [HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle\Dependents\{$GUID}และ[HKEY_CLASSES_ROOT\Installer\Dependencies\,,amd64,14.0,bundle\Dependents\{$GUID}
kayleeFrye_onDeck

2
แพคเกจใหม่ของ Visual C ++ 2017 เปลี่ยนเส้นทางรีจิสทรี (เวอร์ชัน 14.16.27012.6)[HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x86,x86,14.16,bundle] [HKEY_CLASSES_ROOT\Installer\Dependencies\VC,redist.x64,amd64,14.16,bundle]
ถ่ายทอดสด

31

ลอง

HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\11.0

เป็นจุดเริ่มต้น ฉันจะใช้สิ่งนี้เพื่อตรวจสอบการติดตั้งรันไทม์ VC ++ 11 (VS 2012)


7
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ DevDiv \ vc \ Servicing \ 11.0 \ RuntimeMinimum \ Install ควรตั้งค่าเป็น 1
Alex Spence

3
สำหรับ 32 บิต (aka x86) คีย์จะอยู่ที่:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DevDiv\VC\Servicing\11.0\RuntimeMinimum
CodeFox

@kayleeFrye_onDeck เจอวิธีทำแล้วหรือยัง? ฉันยังคงมองหาวิธีที่เชื่อถือได้เช่นกัน แต่ไม่มีคำตอบใดในหน้านี้ที่ได้ผลสำหรับฉัน
AN

คำตอบที่ดีกว่าคำตอบที่ได้รับการยอมรับเนื่องจากไม่ได้พึ่งพา UUID ของแพ็คเกจซึ่งมีแนวโน้มที่จะเปลี่ยนแปลงสำหรับทุกแพตช์ที่ Microsoft มีให้
jpo38

25

คุณสามารถตรวจสอบ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


ฉันมีเครื่อง Win7 32 บิตที่ติดตั้งรันไทม์ 2012 VC ++ และฉันไม่มีคีย์ reg นี้
BryanJ

คุณแน่ใจหรือไม่ว่าคุณไม่มี "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ VisualStudio \ 11.0 \ VC` คุณมีอะไร?
Mike de Klerk

2
ฉันมีHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VCแต่ฉันไม่มีRuntimesกุญแจ HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\11.0ฉันจะมีคำตอบที่สำคัญในเดฟฯ
BryanJ

@BryanJ แปลกที่แต่ละระบบสามารถแตกต่างกันได้ ... ขอบคุณที่เพิ่มข้อมูลที่เป็นประโยชน์นี้
Mike de Klerk

3
เรื่องตลกและไม่มีข้อมูลจริงจาก MS ฉันคิดว่าคุณมีคำตอบที่ดีที่สุดที่ฉันเคยเห็นมา ทดสอบเพื่อติดตั้ง vcredist บน VM ใหม่ relativley และนี่เป็นคีย์เดียวที่ฉันพบในภายหลัง ยกนิ้วขึ้นจากด้านข้างของฉัน ...
anhoppe

12

ไม่มีองค์ประกอบ installcheck ในรายการแพ็กเกจ bootstrapper ที่มาพร้อมกับ Visual C ++ เดาว่า Microsoft ต้องการติดตั้งเสมอหากคุณตั้งค่าเป็นข้อกำหนดเบื้องต้น

แน่นอนคุณยังสามารถโทรหา MsiQueryProductState เพื่อตรวจสอบว่าแพ็คเกจ VC redist ได้รับการติดตั้งผ่าน MSI หรือไม่รหัสแพ็คเกจสามารถพบได้โดยการเรียกใช้

wmic product get

ที่บรรทัดคำสั่งหรือถ้าคุณอยู่ที่ wmic: root \ cli ให้รัน

product where "Caption like '%C++ 2012%'"

10

คำตอบสำหรับคำถามง่ายๆนี้ไม่ใช่คำถามง่ายๆ แต่ทำงานได้ 100% ของระบบทั้งหมดและยังสามารถขยายไปยัง. net framework ได้อีกมากมาย

ความซับซ้อนมาจากความจริงที่ว่ามีการแก้ไข VC runtimes (และมี) จำนวนมากซึ่งอาจนำไปสู่กรณีที่แม้ว่าจะติดตั้ง VC10 runtimes แล้ว แต่หมายเลขการสร้างของพวกเขายังไม่ล่าสุดเพียงพอดังนั้น EXE ของคุณจะไม่เริ่มทำงานเว้นแต่คุณจะติดตั้ง เวลาทำงานที่แน่นอนที่คุณต้องการหรือหนึ่งในรันไทม์ที่ใหม่กว่าซึ่งเปิดใช้งานเวอร์ชันนี้และเวอร์ชันก่อนหน้าสำหรับเวอร์ชันหลักเดียวกันเพื่อทำงานร่วมกับมัน (นรกเคียงข้างกัน) นอกจากนี้หากคุณมี EXE 64 บิตคุณจะต้องตรวจสอบทั้งสองอย่างคือรันไทม์ 32 และ 64 บิต

ที่กล่าวว่าวิธีเดียวที่เชื่อถือได้ในการตรวจสอบว่ามีการติดตั้งรันไทม์สำหรับ EXE ของคุณหรือไม่คือการพยายามเรียกใช้ EXEหรือ EXE อื่นที่สร้างขึ้นโดยใช้การตั้งค่าเดียวกับ EXE หลักของคุณและมีจุดประสงค์เดียวที่จะทำ - ไม่มีอะไร เพียงแค่เรียกใช้ (ซึ่งหมายความว่ามีการติดตั้งรันไทม์) หรือไม่สามารถรันได้ (เมื่อไม่ได้ติดตั้ง)

ฉันทำสิ่งต่อไปนี้สำหรับโปรแกรมติดตั้งซึ่งจำเป็นต้องติดตั้งรันไทม์ VC10 32 และ 64 บิต: ตัวติดตั้งพยายามเรียกใช้ EXE จำลองทั้งหมดและหากทำได้สำเร็จจะถือว่ารันไทม์ที่เกี่ยวข้องได้รับการติดตั้ง นอกจากนี้ยังแก้ไขสถานการณ์จำลอง 32/64 บิต

โดยวิธีนี้จะใช้เพื่อตรวจสอบว่ามีการติดตั้ง. net framework ที่เหมาะสมหรือไม่ซึ่งเป็นเรื่องยุ่งยากมากใน Windows 8 และ 10 เนื่องจากการสนับสนุน. net 3.5 ในตัวที่ดาวน์โหลดได้ยังรองรับ. net เวอร์ชัน 3.0 และ 2.0 ด้วย ไม่มีรายการรีจิสทรีสำหรับสิ่งเหล่านี้ (และที่แย่กว่านั้นคุณไม่สามารถใช้โปรแกรมติดตั้งเฟรมเวิร์กมาตรฐานได้ที่นี่คุณต้องใช้การสนับสนุนในตัวและดาวน์โหลดผ่าน Windows หรือสร้างแอปของคุณใหม่ด้วย. net 4 แต่นั่นเป็นอีกเรื่องหนึ่ง)

C ++ Dummy EXE สามารถสร้างขึ้นโดยใช้โปรเจ็กต์ที่มีรหัสต่อไปนี้ (และอีกอันในการกำหนดค่า 64 บิตหากจำเป็น):

int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}

อย่าลืมตั้งค่าคุณสมบัติของโครงการการใช้เอ็มเอฟที่จะใช้ MFC ใน DLL ไฟล์ปฏิบัติการจะมีขนาดประมาณ 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

จากนั้นเรียกใช้การตรวจสอบรันไทม์เช่นเมื่อออกจากหน้ายินดีต้อนรับและแคชผลลัพธ์ดังนั้นคุณไม่จำเป็นต้องตรวจสอบซ้ำทุกครั้งที่ผู้ใช้คลิกที่ปุ่ม "ย้อนกลับ" และ "ถัดไป"

จากนั้นสร้างส่วนแบบอ่านอย่างเดียวในแผนผังการติดตั้งและเลือกล่วงหน้าหรือยกเลิกการเลือกในฟังก์ชันที่ดำเนินการก่อนที่จะแสดงหน้าคอมโพเนนต์

สิ่งนี้จะทำให้แน่ใจว่าการติดตั้งส่วนประกอบรันไทม์ที่ขาดหายไปนั้นจำเป็นต้องมีและจะข้ามไปหากมีอยู่แล้ว


ขอบคุณสำหรับเคล็ดลับที่เป็นประโยชน์คุณจำได้ไหมว่าต้องสร้างโครงการประเภทใด VS มีมากมายเหลือเฟือให้เลือก :-)
greenoldman

9

ตั้งแต่ Visual Studio 2010 และต่อมาหยุดใช้ WinSxS อาจเพียงพอที่จะตรวจสอบ% windir% \ system32 \ msvcr110.dll หากคุณต้องการตรวจสอบว่าคุณมีเวอร์ชันใหม่เพียงพอคุณสามารถตรวจสอบได้ว่าเวอร์ชันของไฟล์คือ 11.0.50727.1 (VS2012 RTM) หรือ 11.0.51106.1 (VS2012 Update 1)


+1 สิ่งนี้ง่ายกว่าและเข้าใจผิดได้มากกว่า คีย์รีจิสทรีนั้นใช้ได้ดี แต่ถ้าผู้ใช้ยุ่งกับระบบและลบ msvcr110.dll การตรวจสอบรีจิสทรีก็ไม่มีประโยชน์ ควรตรวจสอบส่วนประกอบทั้งหมดที่คุณต้องการ (msvcr110.dll, msvcp110.dll, mfc, ... ) และสำหรับการอัปเดต 3 เวอร์ชันคือ 11.0.60610.1
stijn

ตกลงไม่สนใจบิตสุดท้ายนั้น: ดูเหมือนว่ามีเพียงตัวติดตั้งคือ 11.0.60610.1 เวอร์ชันของ crt dll ยังคงเป็น 11.0.51106.1
stijn

ยา. dll คือ 11.0.51106.1 แม้ว่าฉันจะติดตั้ง vs2012 sp4
Blub

วิธีนี้ใช้ไม่ได้ ฉันถอนการติดตั้งปี 2005-2015 และฉันยังมีไฟล์ msvc สำหรับ 60, 100, 110, 120 และ 140 ที่นั่น
kayleeFrye_onDeck

โปรดทราบว่าไบนารีที่มาพร้อมกับการอัปเดต VC ++ 2012 4 ( 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
Wai Ha Lee

5

ฉันเจอคำถามนี้เพื่อหาคำตอบในบริบทของการตรวจสอบ Visual C ++ ที่แจกจ่ายต่อได้ซึ่งเป็นส่วนหนึ่งของตัวติดตั้ง MSI ที่สร้างโดย WiX

ฉันไม่ชอบการเปลี่ยนแปลงของ GUID กับเวอร์ชันและระบบปฏิบัติการดังนั้นฉันจึงลงเอยด้วยการสร้างการกระทำแบบกำหนดเองที่เขียนใน C # เพื่อตรวจสอบ Visual C ++ ที่แจกจ่ายต่อได้

ทุกอย่างด้านล่างมีไว้สำหรับ Visual 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>

แก้ไข ฉันกำลังอัปเดตคำตอบนี้พร้อมข้อมูลพื้นฐานเกี่ยวกับการสร้างและใช้การดำเนินการที่กำหนดเอง

ในการสร้างการดำเนินการแบบกำหนดเองใน Visual Studio 2017 พร้อมกับติดตั้งส่วนขยาย WiX Toolset Visual Studio 2017 ฉันใช้เทมเพลตโครงการเพื่อสร้างการดำเนินการแบบกำหนดเอง (C # Custom Action Project for WiX v3)

ฉันตรวจสอบโครงการที่สร้างขึ้นและดูเหมือนว่าจะมีการเปลี่ยนแปลงอยู่แล้วในตอนต้นของบทความนี้: https://www.codeproject.com/Articles/132918/Creating-Custom-Action-for-WIX-Written-in-Managedฉันจึงหยิบบทความนั้นขึ้นมาที่ส่วนAdding Custom Action to the Installerและติดตามด้วยการปรับแต่งบางอย่าง

อีกอย่างหนึ่งที่ฉันทำคือเปลี่ยนเวอร์ชันของ. NET framework ที่โครงการสร้างขึ้นเป็น 3.5

ฉันไม่พบว่ามีประโยชน์จริงๆ แต่คุณสามารถดูhttp://wixtoolset.org/documentation/manual/v3/wixdev/extensions/authoring_custom_actions.html


4

สำหรับฉันตำแหน่งนี้ใช้งานได้: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ DevDiv \ vc \ Servicing \ 11.0 \ RuntimeMinimum \ Version

ตรวจสอบว่าคุณมีเวอร์ชันใดหลังจากติดตั้งแพ็กเกจและใช้เป็นเงื่อนไขในโปรแกรมติดตั้งของคุณ (ของฉันตั้งค่าเป็น 11.0.50727 หลังจากติดตั้ง VCred)


คำตอบนี้คือสิ่งที่เรากำลังมองหา (เทียบกับคำตอบอื่น ๆ ที่นี่ซึ่งน้อยกว่าเกี่ยวกับรันไทม์และอื่น ๆ เกี่ยวกับ Visual studio น่าเสียดาย)
Shaun Wilson

คำตอบนี้ใช้ไม่ได้เนื่องจากคีย์นี้มีอยู่หลังจากที่คุณถอนการติดตั้ง Redists
kayleeFrye_onDeck

4

เพียงไปที่แผงควบคุม> โปรแกรมและคุณลักษณะทั้งหมดจะปรากฏอยู่ที่นั่น

ฉันไม่ใช่ผู้เชี่ยวชาญและคำตอบนี้ค่อนข้างง่ายเมื่อเทียบกับสิ่งที่ผู้คนตอบ (ตรวจสอบรีจิสทรี) ดังนั้นฉันไม่แน่ใจว่าเป็นคำตอบที่ถูกต้องหรือไม่ แต่มันก็เป็นเคล็ดลับสำหรับฉัน

โปรแกรมและคุณสมบัติ



3

ฉันประสบความสำเร็จในการทำสิ่งนี้กับ InnoSetup

ฉันตรวจสอบการมีอยู่ของคีย์รีจิสทรี:

HKLM\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes

หากถอนการติดตั้งแล้วไม่มีอยู่ หากติดตั้งแสดงว่ามีอยู่

อย่างไรก็ตามมันอาจอยู่ใน Wow6432Node:

HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes


นี่ไม่เป็นความจริง มีคีย์อยู่ในทั้งสองตำแหน่งเมื่อถอนการติดตั้งแล้ว
kayleeFrye_onDeck

1
@kayleeFrye_onDeck ใช่ ... ฉันต้องเห็นด้วยกับคุณ แต่ในความเป็นจริงเมื่อฉันลองครั้งแรกมันประสบความสำเร็จ แต่ล่าสุดก็เป็นอย่างที่คุณบอก ฉันไม่รู้ว่าทำไมถึงเป็นแบบนั้น
Fandi Susanto

3

การตรวจสอบสถานะการติดตั้งสำหรับผลิตภัณฑ์ผ่านMsiQueryProductStateนั้นค่อนข้างเทียบเท่ากับการตรวจสอบรีจิสทรีโดยตรง แต่คุณยังต้องใช้ GUID สำหรับProductCode ProductCode

ดังที่กล่าวไว้ในที่อื่นข้อเสียเปรียบประการหนึ่งของวิธีการเหล่านี้คือการอัปเดตแต่ละครั้งจะมี ProductCode ของตัวเอง!

โชคดีที่ MSI มีUpgradeCodeซึ่งระบุ 'ตระกูล' ของผลิตภัณฑ์ คุณสามารถใช้ orca เพื่อเปิดหนึ่งใน MSI เพื่อดึงข้อมูลนี้ ตัวอย่างเช่น UpgradeCode สำหรับการแจกจ่ายต่อของ VS2015 คือ{65E5BD06-6392-3027-8C26-853107D3CF1A}

คุณสามารถใช้MsiEnumRelatedProductsเพื่อรับรหัสผลิตภัณฑ์ทั้งหมดสำหรับ UpgradeCode นั้น ในทางปฏิบัติเนื่องจากการอัปเดต redist แต่ละรายการจะแทนที่การอัปเดตก่อนหน้านี้จะทำให้ได้ ProductCode เดียวเท่านั้นเช่น{B5FC62F5-A367-37A5-9FD2-A6E137C0096F}สำหรับการอัปเดต VS2015 2 x86

ไม่ว่าคุณจะตรวจสอบเวอร์ชันผ่านMsiGetProductInfo ( , INSTALLPROPERTY_VERSIONSTRING, ... ) หรือฟังก์ชันที่คล้ายกันเพื่อเปรียบเทียบกับเวอร์ชันที่คุณต้องการได้เช่นตรวจสอบเวอร์ชันที่เทียบเท่าหรือใหม่กว่า

หมายเหตุว่าภายในโปรแกรมประยุกต์ c ++ คุณยังสามารถใช้_VC_CRT_MAJOR_VERSION, _VC_CRT_MINOR_VERSION, _VC_CRT_BUILD_VERSIONถ้าคุณ#include <crtversion.h>- วิธีนี้คุณสามารถตรวจสอบการคำนวณรุ่น CRT ที่ไบนารีของคุณถูกสร้างขึ้นด้วย


คุณได้รับข้อมูลนี้อย่างไร และนั่นคือ UpgradeCode สำหรับเวอร์ชัน x86 หรือเวอร์ชัน x64?
Ben Key

คุณสามารถใช้ Orca เพื่อเปิด msi และแยก UpgradeCode ค่าที่ระบุนี้คือค่า x86 เป็นอย่างน้อย สำหรับข้อมูลที่เหลือนี่เป็นแหล่งข้อมูลหลัก ฉันไม่พบการอ้างอิงอื่น ๆ เกี่ยวกับแนวทางนี้ทางออนไลน์เกี่ยวกับ redist โดยเฉพาะ แต่รูปแบบ UpgradeCode / family นั้นเป็นเรื่องธรรมดาสำหรับโปรแกรมติดตั้ง MSI
adzm

ฉันรู้จักออร์ก้า ปัญหาเกี่ยวข้องกับการเข้าถึง MSI นั้น ฉันไม่รู้วิธีเข้าถึงโดยตรง วิธีเดียวที่ฉันรู้คือค้นหาในไดเร็กทอรี c: \ Windows \ Installer ฉันมีไฟล์มากกว่า 1,000 ไฟล์ในไดเรกทอรีนั้น ไฟล์ถูกตั้งชื่อแบบสุ่ม วิธีเดียวที่จะตัดสินว่า MSI ใดถูกต้องคือดูคำอธิบาย ซึ่งเกี่ยวข้องกับการกด Alt + Enter บน 1,000 ไฟล์ใน explorer หรือใช้เครื่องมือเพื่อถ่ายโอนข้อมูลคำอธิบายของ 1,000 ไฟล์
Ben Key

ฉันเข้าใจแล้ว คุณสามารถค้นหารีจิสทรีเพื่อค้นหาเส้นทางหรือแม้แต่รหัสการอัพเกรดได้หากคุณทราบรหัสผลิตภัณฑ์ภายใน HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Installer \ UpgradeCodes อย่างไรก็ตามคุณอาจต้องใช้ WMIC (หรือการเข้าถึง msi db แบบเป็นโปรแกรมอื่น ๆ ) เพื่อค้นหาส่วนที่เหลือ wmic product get / format: csv จะถ่ายโอนไฟล์ csv ที่คุณสามารถค้นหาได้ซึ่งมีเส้นทาง msi อยู่ในค่าที่ส่งคืน คุณสามารถเขียนสคริปต์ที่ดีกว่านี้ได้ แต่ก็น่าจะเพียงพอที่จะพาคุณไปในทางของคุณ
adzm

3

รหัส PowerShell นี้ควรใช้เคล็ดลับ

Get-ItemProperty
HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | 
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Format-Table AutoSize

เนื่องจากการเข้ารหัสรหัสผลิตภัณฑ์จำนวนมากจะไม่บินเราจึงแจกแจงรีจิสทรีที่ตรวจสอบ "ชื่อผลิตภัณฑ์" ของแต่ละรายการด้วย regex จากนั้นเราจะตรวจสอบ VersionMajor / VersionMinor (ซึ่งเป็นสิ่งที่เราสนใจจริงๆ) ซึ่งมีค่า ของการอนุญาตให้เราสร้างบิลด์เดียวและรู้ว่ามันจะทำงานต่อไปตลอดอายุการใช้งานของเวอร์ชัน vcredist ที่กำหนด เจตนาตรงนี้เป็นจุด ๆ แต่อาจต้องมีการทับศัพท์สำหรับชุดเครื่องมือเช่น NSIS หรือโปรแกรมติดตั้งที่ใช้ WinAPI
Shaun Wilson

2

ฉันต้องการสิ่งเดียวกันและแม้ว่า AFAIK จะไม่สามารถทำได้โดยทางโปรแกรม แต่ก็ใช้ได้ผลสำหรับฉัน

ฉันเพิ่งไปที่เริ่ม -> ถอนการติดตั้งโปรแกรมและเลื่อนลงมาจนพบ VC ++ ที่แจกจ่ายต่อได้ซึ่งรวมถึงหมายเลขเวอร์ชัน Googling หมายเลขเวอร์ชันบอกว่าเป็นของ VS2012 SP1


2

คำถามเก่า แต่นี่คือแนวทางที่เราใช้นับตั้งแต่ Visual Studio 2005 ประสบความสำเร็จ ฉันเพิ่งทดสอบโดยใช้ Visual Studio 2012 Update 4 เช่นกัน (เนื่องจากในที่สุดเรากำลังอัปเดตซอฟต์แวร์ของเราตั้งแต่ปี 2010 ถึง 2012)

เนื่องจากแพคเกจ Visual C ++ Redistributable ลงทะเบียนโปรแกรมถอนการติดตั้งกับ windows (ดังนั้นจึงปรากฏในรายการ "โปรแกรมและคุณลักษณะ" ของแผงควบคุม) เราจึงตรวจสอบชื่อที่แสดงของคีย์โปรแกรมถอนการติดตั้งในรีจิสทรี

นี่คือรหัส 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:

โปรดทราบว่าเนื่องจากโปรแกรมติดตั้งของเราเป็น exe 32 บิต windows จึงจัดการเพื่อพิจารณาว่าคีย์รีจิสทรีอยู่ใน Wow6432Node เสมือนจริงหรือไม่แทนที่จะเป็นตำแหน่งด้านบนดังนั้นรหัสด้านบนจึงทำงานได้ทั้งบนหน้าต่าง 64 บิตและ 32 บิตโดยไม่ต้องตรวจสอบคีย์ทั้งสองอย่างชัดเจน

โปรดทราบว่าหากต้องการอัปเดตโค้ดด้านบนเป็น VC ++ Redist เวอร์ชันอื่นเพียงแค่เปลี่ยน GUID ในเส้นทางคีย์รีจิสทรีและชื่อที่แสดงตามที่คุณต้องการ

แม้ว่าวิธีนี้อาจไม่ใช่วิธีที่แนะนำ แต่ก็ใช้ได้กับเครื่องมากกว่า 10,000 เครื่องในช่วง 10 ปีที่ผ่านมาซึ่งใช้งาน windows ทุกรูปแบบตั้งแต่ XP / XP64 ผ่าน Windows 10 โดยใช้ redists สำหรับปี 2005, 2010, 2010sp1 และตอนนี้ 2012u4


1

ฉันจะตรวจสอบInstalledค่าของ

HKLM\SOFTWARE\[WOW6432Node]\Microsoft\Windows\CurrentVersion\Uninstall\{VCRedist_GUID} สำคัญ

  • โดยที่ GUID ของVC++ 2012 (x86)คือ{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}
  • WOW6432Nodeจะมีอยู่หรือไม่ขึ้นอยู่กับVC++ redistผลิตภัณฑ์

0

สิ่งที่คนส่วนใหญ่พลาดคือต้อง/reg:32ตรวจสอบคีย์บน Windows x64

ดูบทความวิธีใช้ของ Microsoftเกี่ยวกับเรื่องนี้

นี่คือสคริปต์ที่สาธิตวิธีการตรวจสอบ Visual C ++ Redistributable สำหรับ Visual Studio 2012 Update 4 อย่างถูกต้อง

@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

0

โซลูชันสคริปต์ powershell:

จากข้อมูลในคำตอบจาก @kayleeFrye_onDeck

ฉันได้สร้างสคริปต์ powershell ที่ตรวจสอบและติดตั้งเวอร์ชันที่ผู้ใช้ระบุฉันยังไม่ได้ทำการทดสอบอย่างละเอียด แต่สำหรับสถานการณ์ 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

$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
}

สามารถดูสคริปต์ฉบับเต็มและข้อมูลเพิ่มเติมได้ที่ github

ทุกคนสามารถมีส่วนร่วมได้หากฉันมีเวลาฉันจะทำการทดสอบสคริปต์ให้ครอบคลุมมากขึ้นและพยายามเพิ่มแพ็คเกจใหม่ต่อไปเมื่อมีการเพิ่มข้อมูลที่นี่


0

เป็นการยากที่จะรับค่ารีจิสทรีทั้งหมดสำหรับ VC 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;

-5

คุณสามารถค้นหาในรีจิสตรีที่จริงฉันไม่มี vs2012 แต่ฉันมี vs2010

มีคีย์รีจิสทรี 3 แบบ (แต่คล้ายกันมาก) สำหรับแพ็กเกจแพลตฟอร์มทั้ง 3 แพ็กเกจ แต่ละคีย์มีค่า DWORD ที่เรียกว่า "Installed" โดยมีค่าเป็น 1

  • HKLM \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ VC \ VCRedist \ x86

  • HKLM \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ VC \ VCRedist \ x64

  • HKLM \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ VC \ VCRedist \ ia64

คุณสามารถใช้ฟังก์ชันรีจิสทรีได้ ......


1
ฉันได้เขียนไว้ในบรรทัดแรกว่า "ฉันไม่มี VS2012" ไม่จำเป็นต้องแสดงความคิดเห็นนี้ ............. และนี่เป็นเพียงสำหรับ vs2010
vikky

1
คุณทราบแล้ว แต่ดูเหมือนว่าคุณกำลังแนะนำว่าโซลูชันของคุณอาจใช้ได้กับ VS2012 เช่นกันเนื่องจากเป็นคำถามของ OP (แต่ไม่สามารถตรวจสอบได้เนื่องจากคุณไม่มี VS2012) ฉันเพียงแค่ระบุว่าวิธีนี้ใช้ไม่ได้กับ VS2012 ตั้งแต่ที่ฉันตรวจสอบ
StellarEleven

ทำไมลงคะแนนคำตอบของฉัน ...... ฉันเขียนชัดเจนว่ามันสำหรับ vs2012 ... และนี่เป็นที่ยอมรับโดยผู้ใช้ .... แล้วทำไม ???????????
vikky

1
ดูเหมือนว่าด้วยระบบปฏิบัติการ x64 บิตค่านี้จะอยู่ที่HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\VC\VCRedist\...
bas

1
VS 2012 คีย์คือ HKLM \ SOFTWARE \ Microsoft \ VisualStudio \ 11.0 \ VC \ RunTimes ____ HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ VisualStudio \ 11.0 \ VC \ RunTimes ___
Adam L
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.