จะตรวจสอบได้อย่างไรว่ามีการติดตั้ง Visual C ++ Redistributable สำหรับ Visual Studio 2012 หรือไม่
ฉันลองใช้ Google แล้วและไม่มีใครถามคำถามนี้เลยแปลกใจ!
จะตรวจสอบได้อย่างไรว่ามีการติดตั้ง Visual C ++ Redistributable สำหรับ Visual Studio 2012 หรือไม่
ฉันลองใช้ Google แล้วและไม่มีใครถามคำถามนี้เลยแปลกใจ!
คำตอบ:
ขึ้นอยู่กับเวอร์ชันที่คุณใช้ คีย์ 2012 ทั้งสองนี้ทำงานได้ดีสำหรับฉันด้วยเวอร์ชันที่เกี่ยวข้องเพื่อดาวน์โหลดสำหรับอัปเดต 4 โปรดทราบว่าตำแหน่ง reg เหล่านี้บางส่วนอาจขึ้นอยู่กับระบบปฏิบัติการ ฉันรวบรวมข้อมูลนี้จากกล่องWindows 10 x64 ฉันจะดำเนินการต่อและถ่ายโอนเวอร์ชัน redist ทั้งหมดเหล่านี้และคีย์ reg ที่ฉันค้นหาเพื่อตรวจจับการติดตั้ง:
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/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_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.. "
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
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
ลองใช้บันเดิลปี 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
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
โปรดติดต่อฉันที่นี่หากสิ่งเหล่านี้ล้าสมัย
[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
เป็นจุดเริ่มต้น ฉันจะใช้สิ่งนี้เพื่อตรวจสอบการติดตั้งรันไทม์ VC ++ 11 (VS 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
ฉันจะมีคำตอบที่สำคัญในเดฟฯ
ไม่มีองค์ประกอบ installcheck ในรายการแพ็กเกจ bootstrapper ที่มาพร้อมกับ Visual C ++ เดาว่า Microsoft ต้องการติดตั้งเสมอหากคุณตั้งค่าเป็นข้อกำหนดเบื้องต้น
แน่นอนคุณยังสามารถโทรหา MsiQueryProductState เพื่อตรวจสอบว่าแพ็คเกจ VC redist ได้รับการติดตั้งผ่าน MSI หรือไม่รหัสแพ็คเกจสามารถพบได้โดยการเรียกใช้
wmic product get
ที่บรรทัดคำสั่งหรือถ้าคุณอยู่ที่ wmic: root \ cli ให้รัน
product where "Caption like '%C++ 2012%'"
คำตอบสำหรับคำถามง่ายๆนี้ไม่ใช่คำถามง่ายๆ แต่ทำงานได้ 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
จากนั้นเรียกใช้การตรวจสอบรันไทม์เช่นเมื่อออกจากหน้ายินดีต้อนรับและแคชผลลัพธ์ดังนั้นคุณไม่จำเป็นต้องตรวจสอบซ้ำทุกครั้งที่ผู้ใช้คลิกที่ปุ่ม "ย้อนกลับ" และ "ถัดไป"
จากนั้นสร้างส่วนแบบอ่านอย่างเดียวในแผนผังการติดตั้งและเลือกล่วงหน้าหรือยกเลิกการเลือกในฟังก์ชันที่ดำเนินการก่อนที่จะแสดงหน้าคอมโพเนนต์
สิ่งนี้จะทำให้แน่ใจว่าการติดตั้งส่วนประกอบรันไทม์ที่ขาดหายไปนั้นจำเป็นต้องมีและจะข้ามไปหากมีอยู่แล้ว
ตั้งแต่ Visual Studio 2010 และต่อมาหยุดใช้ WinSxS อาจเพียงพอที่จะตรวจสอบ% windir% \ system32 \ msvcr110.dll หากคุณต้องการตรวจสอบว่าคุณมีเวอร์ชันใหม่เพียงพอคุณสามารถตรวจสอบได้ว่าเวอร์ชันของไฟล์คือ 11.0.50727.1 (VS2012 RTM) หรือ 11.0.51106.1 (VS2012 Update 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
ฉันเจอคำถามนี้เพื่อหาคำตอบในบริบทของการตรวจสอบ 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
สำหรับฉันตำแหน่งนี้ใช้งานได้: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ DevDiv \ vc \ Servicing \ 11.0 \ RuntimeMinimum \ Version
ตรวจสอบว่าคุณมีเวอร์ชันใดหลังจากติดตั้งแพ็กเกจและใช้เป็นเงื่อนไขในโปรแกรมติดตั้งของคุณ (ของฉันตั้งค่าเป็น 11.0.50727 หลังจากติดตั้ง VCred)
เพียงไปที่แผงควบคุม> โปรแกรมและคุณลักษณะทั้งหมดจะปรากฏอยู่ที่นั่น
ฉันไม่ใช่ผู้เชี่ยวชาญและคำตอบนี้ค่อนข้างง่ายเมื่อเทียบกับสิ่งที่ผู้คนตอบ (ตรวจสอบรีจิสทรี) ดังนั้นฉันไม่แน่ใจว่าเป็นคำตอบที่ถูกต้องหรือไม่ แต่มันก็เป็นเคล็ดลับสำหรับฉัน
if RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x86","Installed") = 0 Then
if RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86","Installed") = 0 Then
ฉันประสบความสำเร็จในการทำสิ่งนี้กับ InnoSetup
ฉันตรวจสอบการมีอยู่ของคีย์รีจิสทรี:
HKLM\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes
หากถอนการติดตั้งแล้วไม่มีอยู่ หากติดตั้งแสดงว่ามีอยู่
อย่างไรก็ตามมันอาจอยู่ใน Wow6432Node:
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes
การตรวจสอบสถานะการติดตั้งสำหรับผลิตภัณฑ์ผ่าน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 ที่ไบนารีของคุณถูกสร้างขึ้นด้วย
รหัส PowerShell นี้ควรใช้เคล็ดลับ
Get-ItemProperty
HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Format-Table –AutoSize
ฉันต้องการสิ่งเดียวกันและแม้ว่า AFAIK จะไม่สามารถทำได้โดยทางโปรแกรม แต่ก็ใช้ได้ผลสำหรับฉัน
ฉันเพิ่งไปที่เริ่ม -> ถอนการติดตั้งโปรแกรมและเลื่อนลงมาจนพบ VC ++ ที่แจกจ่ายต่อได้ซึ่งรวมถึงหมายเลขเวอร์ชัน Googling หมายเลขเวอร์ชันบอกว่าเป็นของ VS2012 SP1
คำถามเก่า แต่นี่คือแนวทางที่เราใช้นับตั้งแต่ 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
ฉันจะตรวจสอบInstalled
ค่าของ
HKLM\SOFTWARE\[WOW6432Node]\Microsoft\Windows\CurrentVersion\Uninstall\{VCRedist_GUID}
สำคัญ
VC++ 2012 (x86)
คือ{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}
WOW6432Node
จะมีอยู่หรือไม่ขึ้นอยู่กับVC++ redist
ผลิตภัณฑ์สิ่งที่คนส่วนใหญ่พลาดคือต้อง/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
โซลูชันสคริปต์ 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
ทุกคนสามารถมีส่วนร่วมได้หากฉันมีเวลาฉันจะทำการทดสอบสคริปต์ให้ครอบคลุมมากขึ้นและพยายามเพิ่มแพ็คเกจใหม่ต่อไปเมื่อมีการเพิ่มข้อมูลที่นี่
เป็นการยากที่จะรับค่ารีจิสทรีทั้งหมดสำหรับ 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;
คุณสามารถค้นหาในรีจิสตรีที่จริงฉันไม่มี 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
คุณสามารถใช้ฟังก์ชันรีจิสทรีได้ ......
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\VC\VCRedist\...