【问题标题】:WiX detect .Net 4.0.3WiX检测.Net 4.0.3
【发布时间】:2013-09-28 16:34:11
【问题描述】:

我有一个需要 .Net 4.0.3 (link) 的应用程序。

我找到了this article,它告诉我在哪里可以找到已安装的 .Net 版本,但我只能找到 WiX 编译器识别的包含属性列表 (here)。

我尝试按照this article 中的说明进行操作,它告诉我使用以下代码,但这只是安装 .Net 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 属性或自己检查注册表值来让 WiX 检查特定的 4.0.3 更新?

【问题讨论】:

    标签: wix wix3.7


    【解决方案1】:

    经过一番阅读,我最终在我的解决方案中添加了一个捆绑项目,该项目在标准 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>
    

    条件扩展为 Netfx4FullVersion AND (Netfx4FullVersion &lt;&lt; "4.0.3" OR Netfx4FullVersion &lt;&lt; "4.5") 没有 XML 转义。

    以下文章很有帮助:

    Bundle skeleton code

    Bundle package manifest

    Defining searches using WiX variables

    Chaining packages into a bundle

    How to check for .Net versions

    【讨论】:

    • 嗨,我不明白你用这个做什么?您正在查询 .NET 框架的版本,安装更新时不会更改。如果安装了 .NET framework 4.0,无论是否安装更新,Version 字段都会显示 4.0.30319。我在您的解决方案中遗漏了什么吗?你不应该使用 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Microsoft .NET Framework 4 Extended\KB2600211\?
    • 如果您下载了最新版本的 .Net 框架,更新 4.0.3 是否不包含在包中?我记得在新的虚拟机上进行了测试,以确保安装程序正常工作。如果您已经尝试过,但它不起作用并且您有其他解决方案,请随时发布。
    • 不,它不是 .net 4.0 的一部分(我们需要等待 sp)。我也在 VM 上对其进行测试,建议的解决方案无法正常工作。您可以搜索 4.0.3 注册表项(我已在上一篇文章中发布),但是,我仍然不确定这是正确的方法(搜索 4.0.3 密钥),因为在我的开发人员机器上我没有4.0.3 已安装,异步 BCL 仍在工作(我不知道您的应用是否因为使用异步 BCL 而需要此更新)。
    • 我的应用程序需要 4.0.3 才能支持 LocalDb。您是否有可以发布的工作代码作为答案?如果可行,我很乐意更改已接受的答案=]
    【解决方案2】:

    对于 .net 4.0,注册表项 "SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full" 中的版本值将始终为 4.0.30319(即使已安装更新)。

    这是我在捆绑包中用于搜索是否已安装 .net 4.0.3 版本的代码:

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

    然后在你的 ExePackage DetectCondition 中:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      相关资源
      最近更新 更多