Làm thế nào để phát hiện xem Visual C ++ Redistributable cho Visual Studio 2012 đã được cài đặt chưa?
Tôi đã thử Google nó và chưa ai hỏi câu hỏi này, thật bất ngờ!
Làm thế nào để phát hiện xem Visual C ++ Redistributable cho Visual Studio 2012 đã được cài đặt chưa?
Tôi đã thử Google nó và chưa ai hỏi câu hỏi này, thật bất ngờ!
Câu trả lời:
Nó phụ thuộc vào phiên bản bạn đang sử dụng. Hai khóa 2012 này đã hoạt động tốt đối với tôi với các phiên bản tương ứng của chúng để tải xuống cho Bản cập nhật 4. Xin lưu ý rằng một số vị trí đăng ký này có thể phụ thuộc vào hệ điều hành. Tôi đã thu thập thông tin này từ hộp Windows 10 x64 . Tôi sẽ tiếp tục và kết xuất tất cả các phiên bản danh sách lại này và các khóa reg mà tôi tìm kiếm để phát hiện cài đặt.:
Microsoft Visual C++ 2005 Redistributable (x64)
Registry Key: HKLM\SOFTWARE\Classes\Installer\Products\1af2a8da7e60d0b429d7e6453b3d0182
Configuration: x64
Version: 6.0.2900.2180
URL tải xuống trực tiếp: 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 tải xuống trực tiếp: 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 tải xuống trực tiếp: 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 tải xuống trực tiếp: 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 tải xuống trực tiếp: 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 tải xuống trực tiếp: 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 tải xuống trực tiếp: 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 tải xuống trực tiếp: https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe
cảnh báo phiên bản : Theo phát hiện của người dùng Wai Ha Lee , "... các tệp nhị phân đi kèm với VC ++ 2012 cập nhật 4 ( 11.0.61030.0
) có phiên bản 11.0.60610.1
cho tệp nhị phân ATL và MFC và 11.0.51106.1
cho mọi thứ khác, ví dụ như msvcp110.dll và 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 tải xuống trực tiếp: 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 tải xuống trực tiếp: https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x86.exe
Cân nhắc sử dụng gói 2015-2019 làm giải pháp thay thế
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 tải xuống trực tiếp: 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 tải xuống trực tiếp: https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x86.exe
Cân nhắc sử dụng gói 2015-2019 làm giải pháp thay thế
Lưu ý : Có một quy ước đăng ký mới năm 2017 đang được sử dụng hoặc nó chưa được hoàn thiện. Như tôi đang đoán các khóa cao nhất của:
[HKEY_CLASSES_ROOT\Installer\Dependencies\,,amd64,14.0,bundle]
và
[HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle]
có thể thay đổi, hoặc ít nhất có các GUID lồng nhau khác nhau, tôi sẽ sử dụng danh sách khóa kết thúc bằng 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 tải xuống trực tiếp: 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 tải xuống trực tiếp: https://download.visualstudio.microsoft.com/download/pr/d0b808a8-aa78-4250-8e54-49b8c23f7328/9c5e6532055786367ee61aafb3313c95/vc_redist.x86.exe
Lưu ý : Có một quy ước đăng ký mới khác đang được sử dụng cho Visual C ++ 2019. Dường như cũng không có trình cài đặt độc lập cho Visual C ++ 2019, chỉ có trình cài đặt gói này là Visual C ++ 2015 đến 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 tải xuống trực tiếp: 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 tải xuống trực tiếp: 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 tải xuống trực tiếp: 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 tải xuống trực tiếp: https://download.visualstudio.microsoft.com/download/pr/cc0046d4-e7b4-45a1-bd46-b1c079191224/9c4042a4c2e6d1f661f4c58cf4d129e9/vc_redist.x64.exe
Changelog :
Ngày 19 tháng 8 năm 2019 - Đã thêm phiên bản mới của phiên bản gói 2015-2019 vào
ngày 13 tháng 6 năm 2019 - Đã thêm một phần mới cho phiên bản gói 2015-2019 14.21.27702
và thêm các ghi chú nhỏ vào các phần 2015 và 2017 về việc xem xét việc sử dụng gói mới thay thế.
Ngày 14 tháng 12 năm 2018 - Cập nhật MSVC2008 cho 9.0.30729.6161
bản cập nhật Gói dịch vụ 1 theo phát hiện của Jim Wolff
ngày 27 tháng 11 năm 2018 - Thông tin cập nhật cho MSVC2017 v. 14.16
Ngày 12 tháng 9 năm 2018 - Đã thêm phiên bản báo trước cho 2012 Cập nhật 4 theo phát hiện của Wai Ha Lee
ngày 24 tháng 8, 2018 - Cập nhật phiên bản 2017 cho 14.15.26706, các phụ thuộc Visual C ++ được cập nhật được đóng gói với VS 2017 15.8.1
Ngày 16 tháng 5 năm 2018 - Cập nhật phiên bản 2017 cho 14.14.26405.0 làm mục nhập C ++ 2017 mới
ngày 8 tháng 9 năm 2017 - Cập nhật phiên bản 2017 cho 14.11.25325.0 làm mục nhập Visual C ++ 2017 mới
ngày 7 tháng 4 năm 2017 - Cập nhật phiên bản 14,10 của năm 2017 .25008.0 làm mục nhập Visual C ++ 2017 mới
ngày 24 tháng 10 năm 2016 - Cập nhật thông tin phiên bản 2015 cho 14.0.24215.1
ngày 18 tháng 8 năm 2016 - Cập nhật thông tin phiên bản 2015 cho 14.0.24212
ngày 27 tháng 5 năm 2016 - Thông tin cập nhật cho MSVC2015 Cập nhật 2
Vui lòng liên hệ với tôi tại đây nếu bất kỳ cái nào trong số này trở nên lỗi thời.
[HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle\Dependents\{$GUID}
và[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]
Thử
HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\11.0
như một điểm khởi đầu. Tôi sẽ sử dụng điều này để kiểm tra cài đặt thời gian chạy VC ++ 11 (VS 2012).
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DevDiv\VC\Servicing\11.0\RuntimeMinimum
Bạn có thể kiểm tra Installed
giá trị 1
ở vị trí đăng ký này: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes\x86
trên hệ thống 64-bit. Trong mã dẫn đến việc truy cập khóa đăng ký HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86
. Lưu ý sự vắng mặt của Wow6432Node
.
Trên hệ thống 32-bit, sổ đăng ký giống nhau mà không có Wow6432Node
:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC
nhưng tôi không có Runtimes
chìa khóa. Tôi có chìa khóa trong câu trả lời của Dave HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\11.0
.
Không có phần tử kiểm tra cài đặt nào trong tệp kê khai gói bootstrapper được vận chuyển bằng Visual C ++. Đoán Microsoft luôn muốn cài đặt nếu bạn đặt nó làm điều kiện tiên quyết.
Tất nhiên bạn vẫn có thể gọi MsiQueryProductState để kiểm tra xem gói VC redist đã được cài đặt thông qua MSI hay chưa. Bạn có thể tìm thấy mã gói bằng cách chạy
wmic product get
tại dòng lệnh, hoặc nếu bạn đã ở wmic: root \ cli, hãy chạy
product where "Caption like '%C++ 2012%'"
Rất tiếc, câu trả lời cho những câu hỏi đơn giản này không phải là một câu đơn giản, mà là hoạt động trong 100% tất cả các hệ thống và thậm chí có thể mở rộng cho nhiều khuôn khổ .net.
Sự phức tạp đến từ thực tế là có (và đã) nhiều bản sửa đổi thời gian chạy VC có thể dẫn đến trường hợp mặc dù thời gian chạy VC10 đã được cài đặt, nhưng số bản dựng của chúng không đủ gần đây nên EXE của bạn sẽ không khởi động trừ khi bạn đã cài đặt thời gian chạy chính xác mà bạn yêu cầu hoặc một trong những thời gian chạy mới hơn cho phép phiên bản này và các phiên bản trước cho cùng một phiên bản chính chạy với nó (địa ngục song song). Ngoài ra, nếu bạn có EXE 64 bit, bạn sẽ phải kiểm tra cả hai, thời gian chạy 32 VÀ 64 bit.
Điều đó nói rằng, cách đáng tin cậy duy nhất để xác định xem thời gian chạy cho EXE của bạn đã được cài đặt hay chưa là cố gắng chạy EXE - hoặc một EXE khác được xây dựng với cài đặt tương tự như EXE chính của bạn và mục đích duy nhất là để làm - không có gì. Chỉ chạy (có nghĩa là thời gian chạy đã được cài đặt) hoặc không chạy (khi chưa được cài đặt).
Tôi đã làm như sau đối với trình cài đặt yêu cầu cài đặt thời gian chạy VC10 32 và 64 bit: Trình cài đặt cố gắng khởi chạy tất cả các EXE giả và nếu thành công, thời gian chạy tương ứng được coi là đã được cài đặt. Điều này cũng giải quyết kịch bản 32/64 bit.
Nhân tiện, điều này cũng hoạt động để xác định xem khung .net thích hợp đã được cài đặt hay chưa, điều này rất phức tạp trong Windows 8 và 10, vì hỗ trợ .net 3.5 có thể tải xuống cũng hỗ trợ .net phiên bản 3.0 và 2.0 - tại đó không có mục đăng ký cho những. (Và tệ hơn, bạn thậm chí không thể sử dụng trình cài đặt khuôn khổ tiêu chuẩn ở đây, bạn phải sử dụng hỗ trợ tích hợp và tải xuống qua Windows hoặc xây dựng lại ứng dụng của bạn bằng .net 4, nhưng đó là một câu chuyện khác).
C ++ giả EXE có thể được xây dựng bằng cách sử dụng một dự án với mã sau (và một dự án khác trong cấu hình 64 bit nếu cần):
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
Hãy nhớ đặt thuộc tính của dự án Sử dụng MFC để Sử dụng MFC trong một DLL được chia sẻ . Các tệp thực thi sẽ có kích thước khoảng 4KB - một mức giá nhỏ phải trả để có kết quả chắc chắn.
Để cung cấp cho người dùng của bạn trải nghiệm cài đặt tốt, bạn có thể làm như sau (mã mẫu dành cho NSIS ):
Function TryLaunchApplication
Pop $1 ; pathname
nsExec::Exec $1
Pop $0
${If} $0 == "error"
${OrIf} $0 != 0
Push 0
${Else}
Push 1
${EndIf}
FunctionEnd
và gọi nó trong một hàm, ví dụ: 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
Sau đó, khởi chạy kiểm tra thời gian chạy, ví dụ khi rời trang Chào mừng và lưu kết quả vào bộ nhớ cache, vì vậy bạn không phải kiểm tra lại mỗi khi người dùng nhấp vào nút "Quay lại" và "Tiếp theo".
Tiếp theo, tạo một phần chỉ đọc trong cây cài đặt và chọn trước hoặc bỏ chọn nó trên một chức năng được thực thi trước khi trang Thành phần được hiển thị.
Điều này sẽ đảm bảo rằng việc cài đặt từng thành phần thời gian chạy bị thiếu là bắt buộc và sẽ bị bỏ qua nếu nó đã có mặt.
Vì Visual Studio 2010 trở về sau đã ngừng sử dụng WinSxS, có thể chỉ cần kiểm tra% windir% \ system32 \ msvcr110.dll là đủ. Nếu bạn muốn xác minh rằng bạn có phiên bản mới đủ, bạn có thể kiểm tra xem phiên bản tệp là 11.0.50727.1 (VS2012 RTM) hay 11.0.51106.1 (VS2012 Cập nhật 1).
11.0.61030.0
) có phiên bản 11.0.60610.1
cho các tệp nhị phân ATL và MFC và 11.0.51106.1
cho mọi thứ khác, ví dụ: msvcp110.dll và msvcr110.dll. Không chắc chắn lý do tại sao. Bạn có thể xác nhận điều này (trên các máy Windows 10 mà tôi đã thử nghiệm) bằng cách truy cập C:\ProgramData\Package Cache\{BD95A8CD-1D9F-35AD-981A-3E7925026EBB}v11.0.61030\packages\vcRuntimeMinimum_x86
và C:\ProgramData\Package Cache\{B175520C-86A2-35A7-8619-86DC379688B9}v11.0.61030\packages\vcRuntimeAdditional_x86
sau đó kiểm tra các tệp trong tệp .cab.
Tôi đã gặp câu hỏi này để tìm kiếm câu trả lời trong bối cảnh kiểm tra Visual C ++ có thể phân phối lại như một phần của trình cài đặt MSI do WiX tạo.
Tôi không thích sự thay đổi của GUID với phiên bản và hệ điều hành, vì vậy tôi đã kết thúc việc tạo một hành động tùy chỉnh được viết bằng C # để kiểm tra khả năng phân phối lại Visual C ++.
Mọi thứ bên dưới dành riêng cho Visual C ++ 2015 Redistributable (x64), nhưng nó có thể dễ dàng sửa đổi cho bất kỳ phiên bản nào.
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;
}
}
}
Sau đó, trong tệp 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>
Chỉnh sửa Tôi đang cập nhật câu trả lời này với một số thông tin cơ bản về cách tạo và sử dụng một hành động tùy chỉnh.
Để tạo hành động tùy chỉnh trong Visual Studio 2017 với phần mở rộng WiX Toolset Visual Studio 2017 được cài đặt, tôi đã sử dụng mẫu dự án để tạo hành động tùy chỉnh (Dự án hành động tùy chỉnh C # cho WiX v3).
Tôi đã kiểm tra dự án được tạo và dường như đã có những thay đổi được liệt kê ở đầu bài viết này: https://www.codeproject.com/Articles/132918/Creating-Custom-Action-for-WIX-Written-in-Managed vì vậy tôi đã chọn bài báo đó tại phầnAdding Custom Action to the Installer
và theo dõi nó với một số chỉnh sửa.
Một điều khác mà tôi đã làm là thay đổi phiên bản của .NET framework mà dự án được xây dựng dựa trên thành 3.5.
Tôi không thấy nó thực sự hữu ích nhưng bạn cũng có thể xem http://wixtoolset.org/documentation/manual/v3/wixdev/extensions/authoring_custom_actions.html
Đối với tôi, vị trí này đã hoạt động: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ DevDiv \ vc \ Servicing \ 11.0 \ RuntimeMinimum \ Version
Kiểm tra phiên bản bạn có sau khi cài đặt gói và sử dụng phiên bản đó làm điều kiện trong trình cài đặt của bạn. (của tôi được đặt thành 11.0.50727 sau khi cài đặt VCred).
Chỉ cần đi tới Bảng điều khiển> Chương trình và Tính năng, và tất cả chúng đều xuất hiện được liệt kê ở đó.
Tôi không phải là chuyên gia và câu trả lời này khá đơn giản so với những gì mọi người đang trả lời (kiểm tra sổ đăng ký), vì vậy tôi không chắc đó có phải là câu trả lời chính xác hay không nhưng nó đã giúp tôi.
Tôi đã không thể làm được điều này với InnoSetup.
Tôi đã kiểm tra sự tồn tại của khóa đăng ký:
HKLM\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes
Nếu gỡ cài đặt, nó không tồn tại. Nếu được cài đặt, nó tồn tại.
Nhân tiện, nó cũng có thể nằm trong Wow6432Node:
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes
Kiểm tra trạng thái cài đặt cho sản phẩm thông qua MsiQueryProductState tương đương với việc kiểm tra sổ đăng ký trực tiếp, nhưng bạn vẫn cần GUID cho ProductCode .
Như đã đề cập ở những nơi khác, một nhược điểm với những cách tiếp cận này là mỗi bản cập nhật có Mã sản phẩm riêng!
Rất may, MSI cung cấp một UpgradeCode trong đó xác định một 'gia đình' của sản phẩm. Bạn có thể sử dụng orca để mở một trong các MSI để trích xuất thông tin này. Ví dụ: Mã nâng cấp cho khả năng phân phối lại của VS2015 là{65E5BD06-6392-3027-8C26-853107D3CF1A}
Bạn có thể sử dụng MsiEnumRelatedProducts để nhận tất cả ID sản phẩm cho Mã nâng cấp đó. Trên thực tế, vì mỗi bản cập nhật danh sách lại thay thế bản trước đó, điều này sẽ chỉ mang lại một Mã sản phẩm - chẳng hạn như {B5FC62F5-A367-37A5-9FD2-A6E137C0096F}
cho Bản cập nhật VS2015 2 x86.
Bất kể, bạn có thể kiểm tra phiên bản thông qua MsiGetProductInfo (productCode, INSTALLPROPERTY_VERSIONSTRING, ...) hoặc các chức năng tương tự để so sánh với phiên bản bạn muốn, ví dụ: để kiểm tra phiên bản tương đương hoặc mới hơn.
Lưu ý rằng trong một ứng dụng C ++, bạn cũng có thể sử dụng _VC_CRT_MAJOR_VERSION
, _VC_CRT_MINOR_VERSION
, _VC_CRT_BUILD_VERSION
nếu bạn #include <crtversion.h>
- bằng cách này bạn có thể xác định tính toán phiên bản CRT rằng nhị phân của bạn được xây dựng với.
Mã PowerShell này sẽ thực hiện thủ thuật
Get-ItemProperty
HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Format-Table –AutoSize
Tôi cần điều tương tự và mặc dù AFAIK điều này không thể được thực hiện theo chương trình, nhưng nó đã hoạt động với tôi.
Tôi vừa đi tới Bắt đầu -> Gỡ cài đặt chương trình và cuộn xuống cho đến khi tôi tìm thấy VC ++ có thể phân phối lại, bao gồm số phiên bản. Googling số phiên bản, cho tôi biết nó thuộc về VS2012 SP1.
Câu hỏi cũ nhưng đây là cách tiếp cận mà chúng tôi đã sử dụng kể từ Visual Studio 2005 thành công. Tôi cũng vừa thử nghiệm nó bằng Visual Studio 2012 Update 4 (vì cuối cùng chúng tôi cũng đang cập nhật phần mềm của mình từ năm 2010 đến năm 2012).
Vì các gói Visual C ++ Redistributable đăng ký trình gỡ cài đặt của chúng với cửa sổ (vì vậy nó hiển thị trong danh sách "Chương trình và Tính năng" của Bảng điều khiển), chúng tôi chỉ cần kiểm tra Tên hiển thị của khóa trình gỡ cài đặt trong sổ đăng ký.
Đây là mã NSIS có liên quan:
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:
Lưu ý rằng vì trình cài đặt của chúng tôi là exe 32 bit, các cửa sổ xử lý việc xác định xem khóa đăng ký có thực sự nằm trong Wow6432Node được ảo hóa hay không thay vì vị trí ở trên, vì vậy mã trên hoạt động trên cả cài đặt windows 64 bit và 32 bit mà không cần phải kiểm tra rõ ràng cả hai khóa.
Cũng lưu ý rằng để cập nhật mã trên lên một phiên bản khác của VC ++ Redist, chỉ cần thay đổi GUID trong đường dẫn khóa đăng ký và tên hiển thị thành bất cứ thứ gì bạn cần.
Mặc dù đây có thể không phải là phương pháp được khuyến nghị, nhưng nó đã hoạt động trên hơn 10.000 máy trong hơn 10 năm qua chạy mọi phiên bản windows từ XP / XP64 Thông qua Windows 10 bằng cách sử dụng danh sách lại cho các năm 2005, 2010, 2010sp1 và bây giờ là 2012u4.
Điều mà hầu hết mọi người bỏ lỡ là yêu cầu /reg:32
kiểm tra khóa trên Windows x64.
Xem bài viết Trợ giúp của Microsoft về chủ đề này.
Đây là một tập lệnh trình bày cách kiểm tra chính xác Visual C ++ Redistributable cho 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
Giải pháp tập lệnh powershell:
Dựa trên thông tin trong câu trả lời từ @kayleeFrye_onDeck
Tôi đã tạo một tập lệnh powershell để kiểm tra và cài đặt các phiên bản mà người dùng chỉ định, tôi chưa thực hiện thử nghiệm rộng rãi với nó, nhưng đối với kịch bản CI (Tích hợp liên tục) của riêng tôi, nó hoạt động hoàn hảo.
Toàn bộ tập lệnh và thông tin trên github
Cách tiếp cận mà tôi đã sử dụng dựa trên việc kiểm tra các khóa đăng nhập dựa trên thông tin được cung cấp ở đây. Sau đây là ý chính của những gì script thực hiện:
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
}
}
Việc kiểm tra / tải xuống / cài đặt âm thầm dựa trên $redistInfo
đó chứa thông tin đã biên dịch từ 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
}
Tập lệnh đầy đủ và nhiều thông tin hơn có thể được tìm thấy trên github
Mọi người đều được hoan nghênh đóng góp, nếu có thời gian, tôi sẽ thực hiện thử nghiệm rộng rãi hơn đối với tập lệnh và tiếp tục cố gắng thêm các gói mới khi thông tin được thêm vào đây.
Thật khó để có được tất cả các giá trị đăng ký cho VC 2012 vì vậy tôi đã viết một hàm nhỏ sẽ đi qua tất cả các phụ thuộc và khớp với phiên bản được chỉ định.
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;
}
Sự phụ thuộc:
using System.Text.RegularExpressions;
using Microsoft.Win32;
using System.Linq;
bạn có thể tìm kiếm trong sổ đăng ký. Thực tế tôi không có vs2012 nhưng tôi có vs2010.
Có 3 khóa đăng ký khác nhau (nhưng rất giống nhau) cho mỗi gói trong số 3 gói nền tảng. Mỗi khóa có một giá trị DWORD được gọi là “Đã cài đặt” với giá trị là 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
Bạn có thể sử dụng chức năng đăng ký cho điều đó ......
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\VC\VCRedist\...