Jak wykryć, czy jest zainstalowany pakiet redystrybucyjny Visual C ++ dla programu Visual Studio 2012?
Wypróbowałem go w Google i nikt nie zadał tego pytania, niespodzianka!
visual-c++
sean717
źródło
źródło
Odpowiedzi:
To zależy od używanej wersji. Te dwa klucze 2012 działały dobrze w przypadku ich odpowiednich wersji do pobrania w aktualizacji 4. Należy pamiętać, że niektóre z tych lokalizacji rejestrów mogą być zależne od systemu operacyjnego. Zebrałem te informacje z pudełka z systemem Windows 10 x64 . Zamierzam po prostu zrzucić wszystkie wersje redystrybucyjne i klucze reg, których szukam, aby wykryć instalację .:
Visual C ++ 2005
Bezpośredni adres URL pobierania: https://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x64.EXE
Bezpośredni adres URL pobierania: https://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x86.EXE
Visual C ++ 2008
Bezpośredni adres URL pobierania: https://download.microsoft.com/download/2/d/6/2d61c766-107b-409d-8fba-c39e61ca08e8/vcredist_x64.exe
Bezpośredni adres URL pobierania: https://download.microsoft.com/download/d/d/9/dd9a82d0-52ef-40db-8dab-795376989c03/vcredist_x86.exe
Visual C ++ 2010
Bezpośredni adres URL pobierania: https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x64.exe
Bezpośredni adres URL pobierania: https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe
Visual C ++ 2012
Bezpośredni adres URL pobierania: https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe
Bezpośredni adres URL pobierania: https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe
Ostrzeżenie dotyczące wersji : Wedługustaleń Wai Ha Lee użytkownika, „... pliki binarne, które są dostarczane z aktualizacją 4 (
11.0.61030.0
) VC ++ 2012, mają wersję11.0.60610.1
dla plików binarnych ATL i MFC oraz11.0.51106.1
dla wszystkiego innego, np. msvcp110.dll i msvcr110.dll . .. ”Visual C ++ 2013
Bezpośredni adres URL pobierania: https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x64.exe
Bezpośredni adres URL pobierania: https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x86.exe
Visual C ++ 2015
Rozważ użycie pakietu 2015–2019 jako alternatywy
Bezpośredni adres URL pobierania: https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x64.exe
Bezpośredni adres URL pobierania: https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x86.exe
Visual C ++ 2017
Rozważ użycie pakietu 2015–2019 jako alternatywy
Uwaga : albo używana jest nowa konwencja rejestru z 2017 r., Albo nie została jeszcze sfinalizowana. Jak zgaduję, najwyższe klawisze:
[HKEY_CLASSES_ROOT\Installer\Dependencies\,,amd64,14.0,bundle]
i[HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle]
mogą ulec zmianie lub przynajmniej mają różne zagnieżdżone identyfikatory GUID, użyję listy kluczy kończących się identyfikatorem GUID.
Bezpośredni adres URL pobierania: https://download.visualstudio.microsoft.com/download/pr/9fbed7c7-7012-4cc0-a0a3-a541f51981b5/e7eec15278b4473e26d7e32cef53a34c/vc_redist.x64.exe
Bezpośredni adres URL pobierania: https://download.visualstudio.microsoft.com/download/pr/d0b808a8-aa78-4250-8e54-49b8c23f7328/9c5e6532055786367ee61aafb3313c95/vc_redist.x86.exe
Visual C ++ 2019 ( pakiet 2015-2019 )
Uwaga : w programie Visual C ++ 2019 jest używana inna nowa konwencja rejestru. Wydaje się również, że nie istnieje samodzielny instalator programu Visual C ++ 2019, tylko ten instalator pakietu, czyli Visual C ++ od 2015 do 2019.
14.21.27702
Bezpośredni adres URL pobierania: https://download.visualstudio.microsoft.com/download/pr/9e04d214-5a9d-4515-9960-3d71398d98c3/1e1e62ab57bbb4bf5199e8ce88f040be/vc_redist.x64.exe
Bezpośredni adres URL pobierania: https://download.visualstudio.microsoft.com/download/pr/c8edbb87-c7ec-4500-a461-71e8912d25e9/99ba493d660597490cbb8b3211d2cae4/vc_redist.x86.exe
14.22.27821
Bezpośredni adres URL pobierania: https://download.visualstudio.microsoft.com/download/pr/0c1cfec3-e028-4996-8bb7-0c751ba41e32/1abed1573f36075bfdfc538a2af00d37/vc_redist.x86.exe
Bezpośredni adres URL pobierania: https://download.visualstudio.microsoft.com/download/pr/cc0046d4-e7b4-45a1-bd46-b1c079191224/9c4042a4c2e6d1f661f4c58cf4d129e9/vc_redist.x64.exe
Dziennik zmian :
19 sierpnia 2019 r. - Dodano nową wersję wersji pakietu 2015–2019
13 czerwca 2019 r. - Dodano nową sekcję dotyczącą wersji pakietu 2015–2019
14.21.27702
i dodano małe uwagi do sekcji 2015 i 2017 na temat rozważania użycia nowy pakiet jako alternatywa.14 grudnia 2018 - Zaktualizowano MSVC2008 dla aktualizacji Service Pack 1
9.0.30729.6161
zgodnie z ustaleniami Jima Wolffa 16 maja 2018 - Zaktualizowano wersję 2017 dla 14.14.26405.0 jako nowy wpis C ++ 2017 7 kwietnia 2017 - Zaktualizowana wersja 2017 z 14.10.25008.0 jako nowy wpis dotyczący języka Visual C ++ 2017 24 października 2016 r. - Zaktualizowano informacje o wersji z 2015 r. dla 14.0.24215.1 18 sierpnia 2016 r. - Zaktualizowano informacje o wersji 2015 r. dla 14.0.2421227 listopada 2018 r. - Zaktualizowano informacje dotyczące MSVC2017 wer.
14.16
12 września 2018 r. - Dodano zastrzeżenie dotyczące wersji do 4 Aktualizacji 2012 zgodnie z ustaleniami Wai Ha Lee
24 sierpnia, 2018 - zaktualizowana wersja 2017 dla 14.15.26706, zaktualizowane zależności Visual C ++ spakowane z VS 2017 15.8.1
8 września 2017 - Zaktualizowana wersja 2017 dla 14.11.25325.0 jako nowy wpis Visual C ++ 2017 27 maja 2016 r. - Zaktualizowano informacje dotyczące aktualizacji MSVC2015 2
Skontaktuj się ze mną tutaj, jeśli którykolwiek z nich stanie się nieaktualny.
źródło
[HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle\Dependents\{$GUID}
i[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]
Próbować
jako punkt wyjścia. Użyję tego jako sprawdzianu do zainstalowania środowiska wykonawczego VC ++ 11 (VS 2012).
źródło
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DevDiv\VC\Servicing\11.0\RuntimeMinimum
Możesz sprawdzić, czy
Installed
wartość znajduje się1
w tej lokalizacji rejestru:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes\x86
w systemach 64-bitowych. W kodzie, który spowodowałby dostęp do klucza rejestruHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86
. Zwróć uwagę na brakWow6432Node
.W systemie 32-bitowym rejestr jest taki sam bez
Wow6432Node
:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes\x86
źródło
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\VC
ale nie mamRuntimes
klucza. Mam klucz w odpowiedzi Dave'aHKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\11.0
.W manifeście pakietu programu ładującego dostarczanego z programem Visual C ++ nie ma elementu installcheck. Chyba Microsoft chce zawsze instalować, jeśli ustawisz to jako warunek wstępny.
Oczywiście nadal możesz zadzwonić do MsiQueryProductState, aby sprawdzić, czy pakiet redystrybucji VC jest zainstalowany za pośrednictwem MSI.Kod pakietu można znaleźć, uruchamiając
w wierszu poleceń lub jeśli jesteś już w wmic: root \ cli, uruchom
źródło
Odpowiedź na te proste pytania nie jest niestety prosta, ale działa w 100% wszystkich systemów, a nawet daje się rozszerzyć na liczne frameworki .net.
Złożoność wynika z faktu, że istnieje (i było) wiele wersji środowiska wykonawczego VC, które mogą prowadzić do przypadku, że chociaż środowiska wykonawcze VC10 zostały zainstalowane, ich numer kompilacji nie był wystarczająco nowy, więc plik EXE nie zostałby uruchomiony, chyba że zainstalowano dokładne wymagane środowiska wykonawcze lub jeden z nowszych środowisk wykonawczych, które umożliwiają działanie tej i poprzednich wersji dla tej samej wersji głównej (piekło obok siebie). Ponadto, jeśli masz 64-bitowy plik EXE, będziesz musiał sprawdzić oba środowiska wykonawcze 32 i 64 bitowe.
To powiedziawszy, jedynym niezawodnym sposobem ustalenia, czy środowiska wykonawcze dla twojego EXE są zainstalowane, jest próba uruchomienia EXE - lub innego EXE, który jest zbudowany z tymi samymi ustawieniami co twój główny EXE i którego jedynym celem jest nic. Po prostu uruchom (co oznacza, że środowiska wykonawcze są zainstalowane) lub nie działają (jeśli nie są zainstalowane).
Wykonałem następujące czynności dla instalatora, który wymagał zainstalowania 32 i 64-bitowych środowisk wykonawczych VC10: Instalator próbuje uruchomić wszystkie fałszywe pliki EXE i jeśli to się powiedzie, odpowiednie środowisko wykonawcze jest uważane za zainstalowane. To również rozwiązuje scenariusz 32/64 bitowy.
Nawiasem mówiąc, działa to również w celu ustalenia, czy zainstalowana jest odpowiednia struktura .net, co jest bardzo trudne w Windows 8 i 10, ponieważ wbudowana do pobrania obsługa .net 3.5 obsługuje również wersje .net 3.0 i 2.0 - tam nie ma dla nich wpisów w rejestrze. (Co gorsza, nie możesz tutaj nawet użyć standardowych instalatorów frameworka, musisz skorzystać z wbudowanej obsługi i pobrać ją przez Windows lub przebudować aplikację z .net 4, ale to już inna historia).
Dummy EXE C ++ można zbudować przy użyciu projektu z następującym kodem (i w razie potrzeby innego w konfiguracji 64-bitowej):
Pamiętaj, aby ustawić właściwości projektu Użyj MFC do używania MFC w udostępnionej bibliotece DLL . Pliki wykonywalne będą miały rozmiar około 4KB - niewielka cena za pewny wynik.
Aby zapewnić użytkownikom przyjemną instalację, możesz wykonać następujące czynności (przykładowy kod dotyczy NSIS ):
i wywołaj go w funkcji, np. CheckRuntimes
Następnie uruchom sprawdzanie środowiska uruchomieniowego, np. Opuszczając stronę powitalną i zapisz wynik w pamięci podręcznej, dzięki czemu nie musisz sprawdzać ponownie za każdym razem, gdy użytkownik kliknie przycisk „Wstecz” i „Dalej”.
Następnie utwórz sekcję tylko do odczytu w drzewie instalacji i zaznacz ją wstępnie lub odznacz ją w funkcji, która jest wykonywana przed wyświetleniem strony Komponenty .
Zapewni to, że instalacja każdego brakującego składnika środowiska wykonawczego jest obowiązkowa i jest pomijana, jeśli jest już obecna.
źródło
Ponieważ program Visual Studio 2010 i później przestał używać WinSxS, może wystarczyć sprawdzenie% windir% \ system32 \ msvcr110.dll. Jeśli chcesz sprawdzić, czy masz wystarczająco nową wersję, możesz sprawdzić, czy wersja pliku to 11.0.50727.1 (VS2012 RTM) czy 11.0.51106.1 (VS2012 Update 1).
źródło
11.0.61030.0
) VC ++ 2012, mają wersję11.0.60610.1
dla plików binarnych ATL i MFC, a także11.0.51106.1
dla wszystkiego innego, np. Msvcp110.dll i msvcr110.dll. Nie pewny dlaczego. Możesz to potwierdzić (na komputerach z systemem Windows 10, na których go przetestowałem), przechodząc doC:\ProgramData\Package Cache\{BD95A8CD-1D9F-35AD-981A-3E7925026EBB}v11.0.61030\packages\vcRuntimeMinimum_x86
iC:\ProgramData\Package Cache\{B175520C-86A2-35A7-8619-86DC379688B9}v11.0.61030\packages\vcRuntimeAdditional_x86
sprawdzając pliki w plikach .cab.Natknąłem się na to pytanie, szukając odpowiedzi w kontekście sprawdzania redystrybucji Visual C ++ w ramach instalatora MSI stworzonego przez WiX.
Nie podobało mi się, jak zmienia się GUID wraz z wersją i systemem operacyjnym, więc w końcu utworzyłem niestandardową akcję napisaną w C #, aby sprawdzić, czy istnieje redystrybucja Visual C ++.
Wszystko poniżej dotyczy programu redystrybucyjnego Visual C ++ 2015 (x64), ale można je łatwo zmodyfikować dla dowolnej wersji.
Następnie w pliku wxs
Edytuj Aktualizuję tę odpowiedź o kilka podstawowych informacji na temat tworzenia i używania akcji niestandardowej.
Aby utworzyć akcję niestandardową w programie Visual Studio 2017 z zainstalowanym rozszerzeniem WiX Toolset Visual Studio 2017, użyłem szablonu projektu do utworzenia akcji niestandardowej (C # Custom Action Project for WiX v3).
Sprawdziłem wygenerowany projekt i wydawało się, że zmiany są już wymienione na początku tego artykułu: https://www.codeproject.com/Articles/132918/Creating-Custom-Action-for-WIX-Written-in-Managed więc wybrałem ten artykuł w sekcji
Adding Custom Action to the Installer
i wprowadziłem kilka poprawek.Inną rzeczą, którą zrobiłem, była zmiana wersji frameworka .NET, dla którego projekt jest zbudowany, na 3.5.
Nie uważałem tego za przydatne, ale możesz również zobaczyć http://wixtoolset.org/documentation/manual/v3/wixdev/extensions/authoring_custom_actions.html
źródło
Dla mnie ta lokalizacja zadziałała: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ DevDiv \ vc \ Servicing \ 11.0 \ RuntimeMinimum \ Version
Sprawdź, jaką masz wersję po zainstalowaniu pakietu i użyj tego jako warunku w swoim instalatorze. (mój jest ustawiony na 11.0.50727 po zainstalowaniu VCred).
źródło
Po prostu przejdź do Panelu sterowania> Programy i funkcje, a wszystkie zostaną tam wyświetlone.
Nie jestem ekspertem, a ta odpowiedź jest dość prosta w porównaniu z tym, na co odpowiadają ludzie (sprawdzanie rejestru), więc nie jestem pewien, czy to poprawna odpowiedź, ale mi się udało.
źródło
źródło
Udało mi się to zrobić z InnoSetup.
Sprawdziłem istnienie klucza rejestru:
HKLM\SOFTWARE\Microsoft\VisualStudio\11.0\VC\Runtimes
Jeśli zostanie odinstalowany, nie istnieje. Jeśli jest zainstalowany, istnieje.
Nawiasem mówiąc, może to być również w Wow6432Node:
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes
źródło
Sprawdzanie stanu instalacji produktu za pośrednictwem MsiQueryProductState jest w zasadzie równoważne z bezpośrednim sprawdzeniem rejestru, ale nadal potrzebujesz identyfikatora GUID dla ProductCode .
Jak wspomniano w innym miejscu, jedną wadą tych podejść jest to, że każda aktualizacja ma swój własny kod produktu!
Na szczęście MSI udostępnia UpgradeCode, który identyfikuje „rodzinę” produktów. Możesz użyć orca, aby otworzyć jeden z MSI w celu wyodrębnienia tych informacji. Na przykład UpgradeCode dla pakietu redystrybucyjnego VS2015 to
{65E5BD06-6392-3027-8C26-853107D3CF1A}
Możesz użyć MsiEnumRelatedProducts, aby uzyskać wszystkie identyfikatory produktów dla tego UpgradeCode. W praktyce, ponieważ każda aktualizacja redystrybucyjna zastępuje poprzednią, przyniesie to tylko jeden kod produktu - na przykład w
{B5FC62F5-A367-37A5-9FD2-A6E137C0096F}
przypadku VS2015 Update 2 x86.Niezależnie od tego, możesz następnie sprawdzić wersję za pomocą MsiGetProductInfo (kod produktu, INSTALLPROPERTY_VERSIONSTRING, ...) lub podobne funkcje, aby porównać z wersją, którą chcesz, np. Sprawdzić wersję równoważną lub nowszą.
Należy zauważyć, że w aplikacji C ++, można również użyć
_VC_CRT_MAJOR_VERSION
,_VC_CRT_MINOR_VERSION
,_VC_CRT_BUILD_VERSION
jeśli#include <crtversion.h>
- w ten sposób można określić, obliczyć wersji CRT, że został zbudowany z binarnym.źródło
Ten kod PowerShell powinien załatwić sprawę
źródło
Potrzebowałem tego samego i chociaż AFAIK nie da się tego zrobić programowo, to zadziałało.
Po prostu przeszedłem do Start -> Odinstaluj program i przewijałem w dół, aż znalazłem pakiet redystrybucyjny VC ++, który zawiera numer wersji. Wygooglowując numer wersji, powiedział mi, że należy do VS2012 SP1.
źródło
Stare pytanie, ale tutaj jest podejście, którego używaliśmy z sukcesem od czasu programu Visual Studio 2005. Właśnie przetestowałem to również przy użyciu Visual Studio 2012 Update 4 (ponieważ w końcu aktualizujemy nasze oprogramowanie od 2010 do 2012).
Ponieważ pakiety redystrybucyjne Visual C ++ rejestrują dezinstalator w systemie Windows (więc pojawia się on na liście „Programy i funkcje” w Panelu sterowania), po prostu sprawdzamy nazwę wyświetlaną klucza dezinstalatora w rejestrze.
Oto odpowiedni kod NSIS:
Zwróć uwagę, że ponieważ nasz instalator jest 32-bitowym exe, system Windows określa, czy klucz rejestru znajduje się w rzeczywistości zwirtualizowanym Wow6432Node zamiast w powyższej lokalizacji, więc powyższy kod działa zarówno w 64-bitowych, jak i 32-bitowych instalacjach Windows bez konieczności jawnego sprawdzania obu kluczy.
Należy również pamiętać, że aby zaktualizować powyższy kod do innej wersji VC ++ Redist, po prostu zmień identyfikator GUID w ścieżce klucza rejestru i nazwę wyświetlaną na dowolną potrzebną.
Chociaż może to nie być zalecana metoda, sprawdziła się na ponad 10000 maszynach w ciągu ostatnich 10 lat, uruchamiając wszystkie wersje systemu Windows od XP / XP64 do Windows 10 przy użyciu redystów na lata 2005, 2010, 2010sp1, a teraz 2012u4.
źródło
Sprawdziłbym
Installed
wartośćHKLM\SOFTWARE\[WOW6432Node]\Microsoft\Windows\CurrentVersion\Uninstall\{VCRedist_GUID}
kluczVC++ 2012 (x86)
jest{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}
WOW6432Node
będzie obecny lub nie, w zależności odVC++ redist
produktuźródło
Większość ludzi tęskni za koniecznością
/reg:32
sprawdzenia klucza w systemie Windows x64.Zobacz artykuł pomocy Microsoft na ten temat.
Oto skrypt, który pokazuje, jak poprawnie sprawdzić, czy pakiet redystrybucyjny Visual C ++ dla programu Visual Studio 2012 Update 4.
źródło
Rozwiązanie skryptowe PowerShell:
Na podstawie informacji zawartych w odpowiedzi od @kayleeFrye_onDeck
Stworzyłem skrypt PowerShell, który sprawdza i instaluje wersje określone przez użytkownika, nie przeprowadziłem z nim obszernych testów, ale w moim własnym scenariuszu CI (Continuous Integration) działa idealnie.
Pełny skrypt i informacje na githubie
Podejście, które zastosowałem, polegało na sprawdzeniu kluczy rejestru na podstawie informacji podanych tutaj. Oto istota tego, co robi skrypt:
Sprawdzanie / pobieranie / cicha instalacja, na podstawie
$redistInfo
której zawiera skompilowane informacje z kayleeFrye_onDeck's.Pełny skrypt i więcej informacji można znaleźć na github
Każdy może wnieść swój wkład, jeśli będę miał czas, przeprowadzę bardziej szczegółowe testy skryptu i będę próbował dodawać nowe pakiety w miarę dodawania informacji tutaj.
źródło
Trudno jest uzyskać wszystkie wartości rejestru dla VC 2012, więc napisałem małą funkcję, która przejdzie przez wszystkie zależności i dopasuje do określonej wersji.
Zależności:
źródło
możesz szukać w rejestrze. Właściwie nie mam vs2012, ale mam vs2010.
Istnieją 3 różne (ale bardzo podobne) klucze rejestru dla każdego z 3 pakietów platformy. Każdy klucz ma wartość DWORD o nazwie „Zainstalowany” i wartość 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
Możesz użyć do tego funkcji rejestru ......
źródło
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\VC\VCRedist\...