Как определить, установлен ли Visual С++ Redistributable для Visual Studio 2012?
Я попробовал Google, и никто не задавал этот вопрос, удивляясь!
Как определить, установлен ли Visual С++ Redistributable для Visual Studio 2012?
Я попробовал Google, и никто не задавал этот вопрос, удивляясь!
Это зависит от того, какую версию вы используете. Эти два ключа 2012 года хорошо спомогли мне с их соответствующими версиями для загрузки для Обновления 4. Помните, что некоторые из этих местоположений рег могут зависеть от ОС. Я получил эту информацию из Windows 10 x64. Я просто собираюсь выкинуть все эти версии и ключи 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
предостережение версии: для каждого пользователя Wai Ha Lee находки "... двоичные файлы, которые поставляются с V C++ 2012 обновление 4 (11.0.61030.0
), имеют версию 11.0.60610.1
для ATL и MFC двоичные файлы и 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
Consider using the 2015-2019 bundle as an alternative
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
Consider using the 2015-2019 bundle as an alternative
Предостережение: либо используется новое соглашение о реестре 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. Кроме того, не существует отдельного установщика для 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
и добавлен small notes в разделы 2015 и 2017 гг., Посвященный рассмотрению использования нового комплекта в качестве альтернативы.
14 декабря 2018 г. - Обновленное обновление MSVC2008 для пакета обновления 1 9.0.30729.6161
в соответствии с выводами Джима Вольфа
27 ноября 2018 года - Обновлена информация для MSVC2017 v. 14.16
12 сентября 2018 года - добавлена версия предостережения для обновления 4 за 2012 год согласно выводам Вай Ха Ли
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 г. - обновленная версия 2017 г. от 14.10.25008.0 в качестве новой записи Visual C++ 2017 г.
24 октября 2016 г. - Обновлена информация о версии 2015 для 14.0.24215.1
18 августа 2016 г. - Обновлена информация о версии 2015 для 14.0.24212
27 мая 2016 г. - Обновлена информация для MSVC2015, обновление 2
Пожалуйста, свяжитесь со мной здесь, если какой-либо из них устарел.
Try
HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\11.0
в качестве отправной точки. Я буду использовать это как проверку установки VС++ 11 (VS 2012).
Вы можете проверить значение 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
В манифесте пакета bootstrapper, поставляемом с Visual С++, нет элемента installcheck. Угадайте, что Microsoft хочет всегда устанавливать, если вы установите его как необходимое условие.
Конечно, вы все равно можете вызвать MsiQueryProductState, чтобы проверить, установлен ли пакет обновления VC через MSI. Код пакета можно найти, запустив
wmic product get
в командной строке или если вы уже находитесь в wmic: root\cli, запустите
product where "Caption like '%C++ 2012%'"
Ответ на эти простые вопросы, к сожалению, не является простым, но работает в 100% всех систем и даже расширяется до многочисленных инфраструктур .net.
Сложность возникает из-за того, что существуют (и были) многие версии редакций VC, которые могут привести к тому, что хотя время выполнения VC10 было установлено, их номер сборки не был достаточно недавним, чтобы ваш EXE не запускался, если вы не установили очень точные временные промежутки, которые вам нужны, или одну из новых версий, которые позволяют этой и предыдущей версиям работать с одной и той же основной версией (бок о бок ад). Кроме того, если у вас есть 64-разрядный EXE, вам нужно будет проверить обе версии 32 и 64 бит.
Тем не менее, единственный надежный способ определить, были ли установлены среды выполнения для вашего EXE, - попытаться запустить EXE или другой EXE, который построен с теми же настройками, что и ваш основной EXE, и единственной целью которого является - ничего. Просто запустите (что означает, что время выполнения установлено) или не запускается (если не установлено).
Я сделал следующее для установщика, который требовал установки времени исполнения VC10 32 и 64 бит: установщик пытается запустить все фиктивные EXE, и, если это удастся, считается, что соответствующее время выполнения установлено. Это также разрешает сценарий с 32/64 бит.
Это, кстати, также помогает определить, установлена ли правильная инфраструктура .net, что очень сложно в Windows 8 и 10, поскольку загружаемая встроенная поддержка .net 3.5 также поддерживает версии .net версии 3.0 и 2.0 - для этого нет записей в реестре. (И хуже того, вы даже не можете использовать стандартные установщики фреймов здесь, вы должны использовать встроенную поддержку и загружать ее через Windows или перестраивать приложение с .net 4, но это другая история).
CML-фиктивный EXE может быть создан с использованием проекта со следующим кодом (и еще один в 64-битной конфигурации, если необходимо):
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
Не забудьте установить свойства проекта Использование MFC в Использовать MFC в общей DLL. Исполняемые файлы будут размером около 4 КБ - небольшая цена, чтобы заплатить за верный результат.
Чтобы предоставить пользователям хороший опыт установки, вы можете сделать следующее (пример кода для 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) или 11.0.51106.1 (обновление VS2012 1).
Я наткнулся на этот вопрос в поисках ответа в контексте проверки возможности распространения Visual C++ в рамках программы установки MSI, созданной WiX.
Мне не понравилось, как GUID меняется в зависимости от версии и операционной системы, поэтому в итоге я создал специальное действие, написанное на С#, для проверки возможности распространения 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, я использовал шаблон проекта для создания настраиваемого действия (С# Custom Action Project для 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 Обслуживание \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!
К счастью, MSI предоставляет UpgradeCode, который идентифицирует "семейство" продуктов. Вы можете использовать orca, чтобы открыть один из MSI для извлечения этой информации. Например, UpgradeCode для VS2015 распространяется следующим образом: {65E5BD06-6392-3027-8C26-853107D3CF1A}
Вы можете использовать MsiEnumRelatedProducts, чтобы получить все идентификаторы продуктов для этого кода UpgradeCode. На практике, поскольку каждое обновление для повторного набора заменяет предыдущее, это приведет только к одному ProductCode - например, {B5FC62F5-A367-37A5-9FD2-A6E137C0096F}
для VS2015 Update 2 x86.
Независимо от этого, вы можете проверить версию через MsiGetProductInfo (productCode, INSTALLPROPERTY_VERSIONSTRING,...) или аналогичные функции для сравнения с версией, которую вы хотите, например, проверить эквивалентную или более позднюю версию.
Обратите внимание, что в приложении С++ вы также можете использовать _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 это не может быть сделано программно, это сработало для меня.
Я просто зашел в меню "Пуск" → "Удалить программу" и прокрутил вниз до тех пор, пока не найду VС++, распространяемый, который включает номер версии. Перейдя по номеру версии, сказал, что он принадлежит VS2012 SP1.
Старый вопрос, но вот подход, который мы использовали с Visual Studio 2005 с успехом. Я просто протестировал его с помощью Visual Studio 2012 Update 4 (так как мы, наконец, обновляем наше программное обеспечение с 2010 по 2012 год).
Так как распространяемые пакеты Visual С++ регистрируют свой деинсталлятор с окнами (поэтому он отображается в списке "Программы и возможности" панели управления), мы просто проверяем отображаемое имя ключа деинсталлятора в реестре.
Вот соответствующий код 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:
Обратите внимание, что поскольку наш установщик представляет собой 32-разрядный exe, окна обрабатывают определение того, действительно ли ключ реестра находится в виртуализованном Wow6432Node вместо указанного выше местоположения, поэтому приведенный выше код работает как на 64-битных, так и на 32-битных окнах, без необходимости явно проверять оба ключа.
Также обратите внимание, что для обновления вышеуказанного кода к другой версии VС++ Redist просто измените GUID в пути ключа реестра и отображаемое имя на все, что вам нужно.
В то время как это может быть не рекомендованный метод, за последние 10 лет он работал на более чем 10 000 машинах, каждый раз используя каждый из окон из XP/XP64 через Windows 10, используя переименования для 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 по этому вопросу.
Вот script, который демонстрирует, как правильно проверять распространение на Visual С++ для обновления Visual Studio 2012 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 (Continuous Integration) он отлично работает.
Полный скрипт и информация о 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
основана на $redistInfo
который содержит скомпилированную информацию из 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
}
Полный скрипт и дополнительную информацию можно найти на github
Любой желающий может внести свой вклад, если у меня будет время, я проведу более тщательное тестирование сценария и продолжу пытаться добавлять новые пакеты, так как здесь добавляется информация.
вы можете искать в реестре. Фактически у меня нет vs2012, но у меня есть vs2010.
Существует 3 разных (но очень похожих) ключа реестра для каждого из трех пакетов платформы. Каждый ключ имеет значение DWORD под названием "Установлено" со значением 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
Вы можете использовать функцию реестра для этого...