2013-09-23 17 views
5

Ich habe eine Anwendung, die erfordert. Net 4.0.3 (link).WiX erkennen. Net 4.0.3

Ich habe this article gefunden, die mir sagt, wo ich die Version von .Net finden würde, die installiert wird, aber alles, was ich finden kann, ist die Liste der enthaltenen Eigenschaften, die der WiX-Compiler erkennt (here).

Ich habe versucht, nach den Anweisungen in this article, die mir den folgenden Code zu verwenden, sagt, aber dies installiert nur .Net 4 ohne das Update:

<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> 

Wie würde ich mich darum, WiX überprüfen das spezifische Update 4.0.3 entweder über eine vordefinierte WiX-Eigenschaft oder den Registrierungswert selbst prüfen?

Antwort

4

Nach einigem Lesen habe ich ein Projektpaket zu meiner Lösung hinzugefügt, das auf meine Hauptversion Product im Standard-WiX-Installationsprojekt verweist (MyProject.Installer). Ich habe dann eine RegistrySearch verwendet, um die Version der vollständigen .Net 4-Installation zu finden.

<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> 

Der Zustand erweitert, um Netfx4FullVersion AND (Netfx4FullVersion << "4.0.3" OR Netfx4FullVersion << "4.5") ohne XML zu entkommen.

wurden folgende Artikel hilfreich:

Bundle skeleton code

Bundle package manifest

Defining searches using WiX variables

Chaining packages into a bundle

How to check for .Net versions

+0

Hallo, ich verstehst du nicht, was du damit bewerkstelligst? Sie suchen nach der Version von .NET Framework, die sich bei der Installation des Updates nicht ändert. Wenn .NET Framework 4.0 installiert ist, wird im Feld Version 4.0.30319 angezeigt, unabhängig davon, ob das Update installiert ist oder nicht. Fehle ich etwas in deiner Lösung? Sollten Sie HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Updates \ Microsoft.NET Framework 4 Extended \ KB2600211 \ nicht verwenden? – Goran

+0

Wenn Sie eine aktuelle Version des .NET-Frameworks herunterladen, ist das Update 4.0.3 nicht im Paket enthalten? Ich erinnere mich, dass ich dies auf neuen virtuellen Maschinen getestet habe, um sicherzustellen, dass das Installationsprogramm korrekt funktionierte. Wenn Sie dies versucht haben und es nicht funktioniert und Sie eine andere Lösung haben, zögern Sie nicht, es zu posten. – Sean

+0

Nein, es ist nicht Teil von .net 4.0 (wir müssen auf sp warten). Ich teste es auch auf VM und die vorgeschlagene Lösung funktioniert nicht richtig. Du könntest nach 4.0.3 Registrierungsschlüssel suchen (was ich im vorherigen Post gepostet habe), bin mir aber immer noch nicht sicher, dass dies der richtige Weg ist (Suche nach 4.0.3 Schlüssel), da ich auf meinem Entwickler keinen Rechner habe 4.0.3 installiert, und asynchrone BCL funktioniert immer noch (ich weiß nicht, ob Ihre App dieses Update benötigt, weil asynchrone BCL verwendet wird). – Goran

3

Versionswert innerhalb des Registrierungsschlüssels "SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full" ist immer 4.0.30319 für .net 4.0 (auch wenn Updates installiert wurden).

Hier ist der Code, ich habe in meinem Bündel verwendet, wenn die .net 4.0.3 Version bereits installiert wurde suchen:

<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" /> 

Dann in Ihrer ExePackage DetectCondition

:

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