Visual Studio 2012 용 Visual C ++ 재배포 가능 패키지가 설치되어 있는지 확인하는 방법은 무엇입니까?
Google을 사용해 보았지만 아무도이 질문을하지 않았습니다. 놀랍습니다!
Visual Studio 2012 용 Visual C ++ 재배포 가능 패키지가 설치되어 있는지 확인하는 방법은 무엇입니까?
Google을 사용해 보았지만 아무도이 질문을하지 않았습니다. 놀랍습니다!
답변:
사용중인 버전에 따라 다릅니다. 이 두 개의 2012 키는 업데이트 4 용으로 다운로드 할 해당 버전과 함께 저에게 잘 작동했습니다. 이러한 등록 위치 중 일부는 OS에 따라 다를 수 있습니다. 이 정보는 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
버전 경고 : 사용자 별 Wai Ha Lee 의 결과, "... VC ++ 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
대안으로 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
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
주의 사항 : 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
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
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
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
변경 내역 :
2019 년 8 월 19 일-2015-2019 번들 버전의 새 버전
추가 2019 년 6 월 13 일-2015-2019 번들 버전에 대한 새 섹션 추가14.21.27702
추가 하고 사용 고려에 대한 2015 및 2017 섹션에 작은 참고 사항 을 추가했습니다. 대안으로 새 번들.
2018 년 12 월 14 일 9.0.30729.6161
-Jim Wolff의 결과에 따라 서비스 팩 1의 MSVC2008 업데이트
2018 년 11 월 27 일-MSVC2017에 대한 정보 업데이트 v.14.16
2018 년 9 월 12 일 Ha Lee의 조사 결과에 따라 2012 업데이트 4에 대한 버전 경고가
8 월 24 일에 추가되었습니다. 2018-14.15.26706에 대한 2017 버전 업데이트, VS 2017 15.8.1과 함께 패키징 된 업데이트 된 Visual C ++ 종속성
2018 년 5 월 16 일-새로운 C ++ 2017 항목
으로 14.14.26405.0에 대한 2017 버전 업데이트 2017 년 9 월 8 일-새로운 Visual C ++ 2017 항목으로 14.11.25325.0에 대한 2017 버전 업데이트 2017 년
4 월 7 일 -2017 년 버전 14.10 업데이트 새로운 Visual C ++ 2017 항목 인 .25008.0
2016 년 10 월 24 일-14.0.24215.1에 대한
2015 버전 정보 업데이트 2016 년 8 월 18 일 -14.0.24212에 대한 2015 버전 정보
업데이트 2016 년 5 월 27 일-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
64 비트 시스템 에서이 레지스트리 위치 에있는 Installed
값을 확인할 수 있습니다 . 레지스트리 키에 액세스하는 코드에서 . 이 없습니다 .1
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\VC\Runtimes\x86
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
열쇠 가 없습니다 . 나는 Dave의 대답에 열쇠가 있습니다 HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\11.0
.
Visual C ++와 함께 제공되는 부트 스트 래퍼 패키지 매니페스트에는 installcheck 요소가 없습니다. 필수 구성 요소로 설정하면 Microsoft가 항상 설치하기를 원합니다.
물론 MsiQueryProductState를 호출하여 MSI를 통해 VC redist 패키지가 설치되었는지 확인할 수 있습니다. 패키지 코드는 다음을 실행하여 찾을 수 있습니다.
wmic product get
명령 줄에서 또는 이미 wmic : root \ cli에있는 경우 다음을 실행합니다.
product where "Caption like '%C++ 2012%'"
이 간단한 질문에 대한 답은 안타깝게도 간단한 질문이 아니라 모든 시스템에서 100 % 작동하며 수많은 .net 프레임 워크로 확장 할 수도 있습니다.
복잡성은 VC 런타임 수정이 많았 기 때문에 VC10 런타임이 설치되었지만 빌드 번호가 충분히 최신이 아니 어서 EXE를 설치하지 않으면 EXE가 시작되지 않을 수 있습니다. 필요한 정확한 런타임 또는 동일한 주 버전에 대해이 버전과 이전 버전을 함께 실행할 수있는 최신 런타임 중 하나 (나란히있는 지옥). 또한 64 비트 EXE가있는 경우 32 비트 및 64 비트 런타임을 모두 확인해야합니다.
즉, EXE의 런타임이 설치되었는지 여부를 확인하는 유일한 방법 은 EXE 실행을 시도하는 것입니다. 또는 주 EXE와 동일한 설정으로 빌드되고 유일한 목적이 아무것도하지 않는 다른 EXE를 실행하는 것입니다. 실행 (런타임이 설치되었음을 의미)하거나 실행에 실패 (설치되지 않은 경우)하십시오.
VC10 32 비트 및 64 비트 런타임을 설치해야하는 설치 프로그램에 대해 다음을 수행했습니다. 설치 프로그램은 모든 더미 EXE를 시작하려고 시도하고 성공하면 해당 런타임이 설치된 것으로 간주됩니다. 이것은 또한 32/64 비트 시나리오를 해결합니다.
그런데 이것은 다운로드 가능한 내장 .net 3.5 지원이 .net 버전 3.0 및 2.0도 지원하므로 Windows 8 및 10에서 매우 까다로운 적절한 .net 프레임 워크가 설치되어 있는지 확인하는데도 사용됩니다. 이들에 대한 레지스트리 항목이 없습니다. (그리고 더 나쁜, 당신도 여기에 표준 프레임 워크 설치 프로그램을 사용할 수 없습니다, 당신은 해야합니다 지원 내장 및 Windows를 통해 다운로드, 또는 .net 4와 응용 프로그램을 다시,하지만 그건 또 다른 이야기의 사용)를.
C ++ 더미 EXE는 다음 코드 (필요한 경우 64 비트 구성의 다른 코드)가있는 프로젝트를 사용하여 빌드 할 수 있습니다.
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
프로젝트의 속성을 설정해야합니다. MFC 를 사용하여 공유 DLL에서 MFC 를 사용합니다. . 실행 파일의 크기는 약 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 업데이트 1)인지 확인할 수 있습니다.
11.0.61030.0
) 와 함께 제공되는 바이너리 11.0.60610.1
에는 ATL 및 MFC 바이너리와 11.0.51106.1
그 밖의 모든 버전 ( 예 : msvcp110.dll 및 msvcr110.dll)이 있습니다. 이유가 확실하지 않습니다. 당신은로 이동하여 (I가 그것을 테스트 한 윈도우 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 파일에있는 파일을 검사.
WiX에서 만든 MSI 설치 프로그램의 일부로 Visual C ++ 재배포 가능 여부를 확인하는 맥락에서이 질문에 답을 찾았습니다.
버전 및 운영 체제에 따라 GUID가 변경되는 방식이 마음에 들지 않아 Visual C ++ 재배포 가능 패키지를 확인하기 위해 C #으로 작성된 사용자 지정 작업을 만들었습니다.
아래의 모든 내용은 특히 Visual C ++ 2015 재배포 가능 패키지 (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>
편집 사용자 지정 작업 만들기 및 사용에 대한 몇 가지 기본 정보로이 답변을 업데이트하고 있습니다.
WiX Toolset Visual Studio 2017 확장이 설치된 Visual Studio 2017에서 사용자 지정 작업을 생성하기 위해 프로젝트 템플릿을 사용하여 사용자 지정 작업 (Wix v3 용 C # 사용자 지정 작업 프로젝트)을 생성했습니다.
생성 된 프로젝트를 확인한 결과 이미이 기사의 시작 부분에 나열된 변경 사항이있는 것 같습니다. https://www.codeproject.com/Articles/132918/Creating-Custom-Action-for-WIX-Written-in-Managed 그래서 섹션에서 그 기사를 선택했습니다.Adding Custom Action to the Installer
약간의 수정을가했습니다.
내가 한 다른 한 가지는 프로젝트가 빌드 된 .NET 프레임 워크의 버전을 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
패키지를 설치 한 후 가지고있는 버전을 확인하고 설치 프로그램의 조건으로 사용하십시오. (VCred 설치 후 광산은 11.0.50727로 설정 됨).
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 를 통해 제품의 설치 상태 를 확인하는 것은 레지스트리를 직접 확인하는 것과 거의 동일하지만 여전히 ProductCode에 대한 GUID가 필요합니다 .
다른 곳에서 언급했듯이 이러한 접근 방식의 한 가지 단점은 각 업데이트에 고유 한 ProductCode가 있다는 것입니다!
고맙게도 MSI는 '패밀리'제품을 식별 하는 UpgradeCode 를 제공합니다 . orca를 사용하여 MSI 중 하나를 열어이 정보를 추출 할 수 있습니다. 예를 들어 VS2015 재배포 가능 파일의 UpgradeCode는 다음과 같습니다.{65E5BD06-6392-3027-8C26-853107D3CF1A}
MsiEnumRelatedProducts 를 사용 하여 해당 UpgradeCode에 대한 모든 제품 ID를 가져올 수 있습니다 . 실제로 각 redist 업데이트가 이전 업데이트를 대체하므로 {B5FC62F5-A367-37A5-9FD2-A6E137C0096F}
VS2015 업데이트 2 x86 과 같이 하나의 ProductCode 만 생성됩니다 .
관계없이 MsiGetProductInfo 를 통해 버전을 확인할 수 있습니다. (productCode, INSTALLPROPERTY_VERSIONSTRING, ...) 또는 유사한 기능을 통해 버전을 확인하여 원하는 버전과 비교할 수 있습니다 (예 : 동등한 버전 또는 이후 버전 확인).
참고는 C ++ 응용 프로그램 내에서, 당신은 또한 사용할 수있는 _VC_CRT_MAJOR_VERSION
, _VC_CRT_MINOR_VERSION
, _VC_CRT_BUILD_VERSION
만약 당신이 #include <crtversion.h>
- 당신이 당신의 바이너리로 지어진 것을 계산 브라운관의 버전을 확인할 수 있습니다 이런 식으로.
이 PowerShell 코드는 트릭을 수행해야합니다.
Get-ItemProperty
HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Format-Table –AutoSize
오래된 질문이지만 여기에 Visual Studio 2005 이후로 성공한 접근 방식이 있습니다. 방금 Visual Studio 2012 업데이트 4를 사용하여 테스트했습니다 (마지막으로 2010 년부터 2012 년까지 소프트웨어를 업데이트하고 있기 때문에).
Visual C ++ 재배포 가능 패키지는 제거 프로그램을 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:
설치 프로그램이 32 비트 exe이기 때문에 Windows는 레지스트리 키가 실제로 위의 위치 대신 가상화 된 Wow6432Node에 있는지 확인하므로 위 코드는 두 키를 모두 명시 적으로 확인하지 않고도 64 비트 및 32 비트 Windows 설치 모두에서 작동합니다.
또한 위 코드를 다른 버전의 VC ++ Redist로 업데이트하려면 레지스트리 키 경로의 GUID와 표시 이름을 필요한대로 변경하면됩니다.
권장되는 방법은 아니지만 2005, 2010, 2010sp1 및 현재 2012u4 용 redist를 사용하여 XP / XP64에서 Windows 10까지 모든 종류의 Windows를 실행하는 지난 10 년 동안 10,000 개 이상의 컴퓨터에서 작업했습니다.
대부분의 사람들이 놓치는 것은 필수입니다. /reg:32
Windows x64에서 키를 확인 한다는 것입니다.
참조 마이크로 소프트 도움말 문서를이 주제에 대한 를 .
다음은 Visual Studio 2012 업데이트 4 용 Visual C ++ 재배포 가능 패키지를 올바르게 확인하는 방법을 보여주는 스크립트입니다.
@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 에 대한 전체 스크립트 및 정보
내가 사용한 접근 방식은 여기에 제공된 정보를 기반으로 regkeys를 확인하는 것입니다. 다음은 스크립트가 수행하는 작업의 요점입니다.
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 개의 서로 다른 (그러나 매우 유사한) 레지스트리 키가 있습니다. 각 키에는 값이 1 인 "설치됨"이라는 DWORD 값이 있습니다.
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\...