2013-09-23 3 views
5

.Net 4.0.3 (link)이 필요한 응용 프로그램이 있습니다.WiX detect .Net 4.0.3

this article 나는 설치된 버전을 찾을 수있는 곳을 알려주지 만, 찾을 수있는 항목은 WiX 컴파일러가 인식하는 포함 된 속성 목록 (here)입니다.

I했습니다 다음 코드를 사용하는 나에게 말한다 this article의 지시, 다음했지만, 이것은 단지 업데이트없이 닷넷 4를 설치합니다

<PropertyRef Id="NETFRAMEWORK40FULL"/> 

<Condition Message="This application requires .NET Framework 4.0.3. Please install the .NET Framework then run this installer again."> 
    <![CDATA[Installed OR NETFRAMEWORK40FULL]]> 
</Condition> 

가 어떻게 윅스가를 확인하고 가겠어요 미리 정의 된 WiX 속성 또는 레지스트리 값을 직접 확인하여 특정 4.0.3 업데이트

답변

4

약간의 읽기 후에 표준 WiX 설치 프로젝트 (MyProject.Installer)에서 내 메인 Product을 참조하는 번들 프로젝트를 솔루션에 추가했습니다. 그런 다음 RegistrySearch을 사용하여 전체 .Net 4 설치 버전을 찾았습니다.

<Bundle ....> 
    <Chain> 
     <PackageGroupRef Id="Netfx4Full" /> 
     <PackageGroupRef Id="Netfx403Update" /> 
     <MsiPackage Id="MyMsi" SourceFile="$(var.MyProject.Installer.TargetPath)" Compressed="yes" DisplayInternalUI="yes" /> 
    </Chain> 
</Bundle> 
<Fragment> 
    <util:RegistrySearch Root="HKLM" 
        Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full" 
        Value="Version" 
        Variable="Netfx4FullVersion" /> 
    <util:RegistrySearch Root="HKLM" 
        Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full" 
        Value="Version" 
        Variable="Netfx4x64FullVersion" 
        Win64="yes" /> 
    <PackageGroup Id="Netfx4Full"> 
     <ExePackage Id="Netfx4Full" 
       Cache="no" 
       Compressed="yes" 
       PerMachine="yes" 
       Permanent="yes" 
       Vital="yes" 
       SourceFile="$(var.ProjectDir)dotNetFx40_Full_x86_x64.exe" 
       DownloadUrl="http://go.microsoft.com/fwlink/?LinkId=164193" 
       DetectCondition="Netfx4FullVersion AND (NOT VersionNT64 OR Netfx4x64FullVersion)" /> 
    </PackageGroup> 

    <PackageGroup Id="Netfx403Update"> 
     <ExePackage Id="Netfx403Update" 
       Cache="no" 
       Compressed="yes" 
       PerMachine="yes" 
       Permanent="yes" 
       Vital="yes" 
       SourceFile="$(var.ProjectDir)NDP40-KB2600211-x86-x64.exe" 
       DetectCondition="Netfx4FullVersion AND (Netfx4FullVersion &lt;&lt; &quot;4.0.3&quot; OR Netfx4FullVersion &lt;&lt; &quot;4.5&quot;)" /> 
    </PackageGroup> 
</Fragment> 

XML 이스케이프 처리없이 조건이으로 확장됩니다.

다음 기사는 도움이되었다 :

Bundle skeleton code

Bundle package manifest

Defining searches using WiX variables

Chaining packages into a bundle

How to check for .Net versions

+0

안녕하세요, 이걸 가지고 무엇을 이루고 있는지 이해가 안 되니? 업데이트를 설치할 때 변경되지 않는 .NET Framework 버전을 쿼리하고 있습니다. .NET Framework 4.0이 설치되어 있으면 버전 필드에 업데이트가 설치되어 있는지 여부에 관계없이 4.0.30319가 표시됩니다. 나는 당신의 솔루션에 뭔가를 놓치고 있습니까? HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Updates \ Microsoft .NET Framework 4 Extended \ KB2600211 \을 사용하지 않아야합니까? – Goran

+0

.Net 프레임 워크의 최신 버전을 다운로드 한 경우 패키지에 업데이트 4.0.3이 포함되어 있지 않습니까? 설치 프로그램이 올바르게 작동하는지 확인하기 위해 새로운 가상 머신에서이를 테스트 해 보았습니다. 이것을 시도했지만 제대로 작동하지 않고 다른 해결책을 가지고 있다면 언제든지 게시하십시오. – Sean

+0

아니요 .net 4.0에 포함되어 있지 않습니다 (우리는 SP를 기다릴 필요가 있습니다). 또한 VM에서 테스트 중이므로 제안 된 솔루션이 제대로 작동하지 않습니다. 4.0.3 레지스트리 키 (이전 게시물에 게시했습니다)를 검색 할 수는 있지만, 개발자 컴퓨터에서는이 방법이 (4.0.3 키를 검색하는) 올바른 방법이라고 확신하지 못합니다. 4.0.3이 설치되어 있고 async BCL이 여전히 작동 중입니다 (비동기 BCL을 사용하기 때문에이 업데이트가 필요한지 여부는 알 수 없습니다). – Goran

3

레지스트리 키 내의 버전 값 "SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full"은 .net 4.0의 경우 항상 4.0.30319입니다 (업데이트가 설치된 경우에도 마찬가지 임). NET에서 4.0.3 버전이 설치된 경우 여기

내가 검색 내 번들에 코드를 사용하고 있습니다 :

당신의 ExePackage DetectCondition에서 다음
<util:RegistrySearch Root="HKLM" 
    Key="SOFTWARE\Microsoft\.NETFramework\v4.0.30319\SKUs\.NETFramework,Version=v4.0.3" 
    Result="exists" 
    Variable="Netfx403" /> 
<util:RegistrySearch Root="HKLM" 
    Key="SOFTWARE\Microsoft\.NETFramework\v4.0.30319\SKUs\.NETFramework,Version=v4.0.3" 
    Result="exists" 
    Variable="Netfx403x64" 
    Win64="yes" /> 

:

DetectCondition="Netfx403 AND (NOT VersionNT64 OR Netfx403x64)"