2009-04-08 23 views
20

Tôi có một câu hỏi rất giống với this one nhưng câu trả lời không phù hợp với tôi.Làm thế nào để phát hiện xem tôi có cần cài đặt VCRedist không?

Phần mềm Tôi đang duy trì cài đặt phụ thuộc vào VC++ 2008 (SP1, chính xác), do đó tôi cần tìm giải pháp để cài đặt VCRedist nếu chưa được cài đặt. Tôi hiểu cách chính xác sẽ được xây dựng msi với mô-đun hợp nhất, nhưng nó không phải trên tay của tôi.

Câu trả lời của câu hỏi trùng lặp mà tôi đang đề cập đến (câu trả lời) không có tác dụng với tôi vì mọi bản phát hành nhỏ (ví dụ 9.0.30729.01 so với 9.0.30729.17) đều có GUID phù hợp. dự đoán cho các phiên bản sau. Hơn nữa, tôi nghĩ rằng điều này sẽ không phát hiện Visual Studios và do đó không cần thiết cài đặt gói VCRedist khi nó đã có trên một máy phát triển. Tôi không muốn lỗi ai với điều này, chắc chắn không phải ai đó đã cài đặt DevStudio.

Bây giờ một câu trả lời khác nói rằng tôi nên tìm trong thư mục WinSxs như $WINDIR\WinSxS\x86_Microsoft.VC80.CRT_ nhưng điều này không (chưa) giúp tôi ngụ ý SP1, hoặc có bất kỳ điều gì tôi thiếu vào thời điểm này không? Có một bảng nào đó với số phiên bản nội bộ và "bên ngoài", vì vậy tôi có thể ngụ ý một số phiên bản nhỏ nhất định?

Tôi không thể tin rằng không có gì được cung cấp bởi Microsoft cho kịch bản này, nhưng tìm kiếm trên interwebs cho đã quá dài bây giờ mang lại cho tôi trở lại ol tốt' SO :)

Trả lời

8

Bạn có thể có những phương pháp đề nghị để cài đặt directx: luôn chạy redistributable. Vì nó là cần thiết và bạn đã được vận chuyển nó không có hại trong việc chạy nó ngay cả khi nó đã được cài đặt.

+0

đã chấp nhận điều này ngay bây giờ. Đây là những gì tôi đang làm bây giờ. Khác dẫn đến các vấn đề (trong một trong hai trường hợp phát hiện) trên W2K8. – lImbus

+4

Nếu bạn làm điều này, hãy chắc chắn chấp nhận và bỏ qua mã lỗi 5100 ("phiên bản mới hơn đã được cài đặt"). Chúng tôi đã có một số đau đớn với điều này trong trình cài đặt PostgreSQL gần đây. –

+6

Luôn chạy trình phân cách lại mất rất nhiều thời gian. – sorin

6

có vẻ như có another solution được đề xuất bởi một nhà phát triển Microsoft, sử dụng MsiQueryProductState API, than ôi cũng dựa vào GUID.

Cập nhật: Mã đã hoạt động ngày hôm qua và có vẻ hoạt động tốt. Đây là những gì beeing thực hiện: Nó được kiểm tra cho GUID mới nhất được biết đến với tôi và con đường ² để-nơi-nó-là-nghĩa vụ phải được cài đặt. Nếu cả hai thất bại, nó được cài đặt. Điều này dường như làm việc tốt.

Ngoài ra, nó được cài đặt với các đối số dòng lệnh "/ qb" có nghĩa là "không giám sát nhưng không ẩn". Xem this other blog post về các thông số đó.

FWIW, GUID cho Microsoft Visual C++ 2008/VC90 SP1 Redistributable - x86 9.0.30729

  • 64bit 30.729,17: 8220EEFE-38CD-377E-8595-13398D740ACE
  • 32bit 30.729,17: 9A25302D-30C0-39D9 -BD6F-21E6EC160475
  • 32bit 30.729,01: 6AFCA4E1-9B78-3640-8F72-A7BF33448200

² đường dẫn: $WINDIR\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729*

13

Đối với Visual Studio C++ 2010, things got a bit easier.

Không giống như các gói Redistributable Visual C++ 2005 và 2008, có các khóa đăng ký có thể được sử dụng để phát hiện sự hiện diện của gói Redistributable Visual C++ 2010.

Visual C++ 2010 Redistributable registry phát hiện gói giá trị

Visual C++ 2010 Redistributable Package (x86)

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ VC \ VCRedist \ x86] Installed = 1 (REG_DWORD)

Visual C++ 2010 Redistributable Package (x64)

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ VC \ VCRedist \ x64].210 Installed = 1 (REG_DWORD)

Visual C++ 2010 Redistributable Package (ia64)

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ VisualStudio \ 10.0 \ VC \ VCRedist \ ia64] Installed = 1 (REG_DWORD)

Lưu ý: Bạn sẽ cần phải kiểm tra theo Wow6432Node trên hệ điều hành 64 bit. (HKLM \ Software \ Wow6432Node \ Microsoft ....)

Nếu bạn thích phiên bản cũ, đây là những GUIDs

Visual C++ 2010 Redistributable mã sản phẩm gói

  • Visual C++ 2010 Redistributable Package (x86) - {196BB40D-1578-3D01-B289-BEFC77A11A1E}
  • Visual C++ 2010 Redistributable Package (x64) - {DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}
  • Visual C++ 2010 Redistributable Package (ia64) - {C1A35166-4301-38E9-BA67-02823AD 72A1B}

trực quan mã sản phẩm C++ 2010 SP1 redistributable gói

  • Visual C++ 2010 SP1 Redistributable Package (x86) - {F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}
  • Visual C++ 2010 SP1 Redistributable Package (x64) - {1D8E6291-B0D5-35EC-8441-6616F567A0F7}
  • Visual C++ 2010 SP1 Redistributable Package (ia64) - {88C73C1C-2DE5-3B01-AFB8-B46EF4AB41CD}
+3

Cảm ơn !, Phần này thực sự đã giúp tôi ... Lưu ý: Bạn sẽ cần phải kiểm tra theo Wow6432Node trên hệ điều hành 64 bit. (HKLM \ Software \ Wow6432Node \ Microsoft ....) – Joe

3

Tôi có nguồn mở a Visual C++ project on Github that checks for VC++ redistributable DLLs cụ thể và làm cho nó có sẵn theo giấy phép Apache 2.0.

Nó có ba phương pháp khác nhau để kiểm tra sự sẵn có của VC++ 9 và VC++ 10 runtimes:

  1. Kiểm tra các API MsiQueryProductState;
  2. Kiểm tra nội dung của thư mục WinSxS để khớp các thư mục sản phẩm; và
  3. Kiểm tra thư mục làm việc hiện tại cho bất kỳ phiên bản địa phương nào của VC++ 9 và VC++ 10 runtimes (và kiểm tra nội dung của chúng.)

Dưới đây là một ví dụ về những gì sử dụng nó thực sự trông như:

wcout << _T("Checking for the availability of VC++ runtimes..") << endl; 
wcout << _T("----------- Visual C++ 2008 (VC++9) -----------") << endl; 
wcout << _T("Visual C++ 2008 (x86) ? ") << (IsVC2008Installed_x86() ? _T("true") : _T("false")) << endl; 
wcout << _T("Visual C++ 2008 (x64) ? ") << (IsVC2008Installed_x64() ? _T("true") : _T("false")) << endl; 
wcout << _T("Visual C++ 2008 SP1 (x86) ? ") << (IsVC2008SP1Installed_x86() ? _T("true") : _T("false")) << endl; 
wcout << _T("Visual C++ 2008 SP1 (x64) ? ") << (IsVC2008SP1Installed_x64() ? _T("true") : _T("false")) << endl; 

tôi được cấp phép dự án crt-detector dưới Apache 2.0, vì vậy cảm thấy tự do để sử dụng nó trong các ứng dụng của riêng bạn.

+0

Tôi yêu bạn cảm ơn! –