【问题标题】:WiX: .Net 3.5 prerequisiteWiX:.Net 3.5 先决条件
【发布时间】:2011-02-02 06:04:25
【问题描述】:

我有一个 WiX 安装程序,我想检查 .Net 3.5,如果不存在就安装它。我的 wixproj 文件中有以下几行:

<BootstrapperFile Include="Microsoft.Net.Framework.3.5">
    <ProductName>.NET Framework 3.5</ProductName>
</BootstrapperFile>
<BootstrapperFile Include="Microsoft.Windows.Installer.3.1">
    <ProductName>WIndows Installer 3.1</ProductName>
</BootstrapperFile>

当我创建安装程序时,会创建一个 DotNetFX35 文件夹,其中包含 4 个不同版本的 .Net(包括 3.5)和一个安装程序文件。

我有两个问题:

  1. 我如何让它只引入 3.5 版(这样用户就不必安装 100+ MB 的文件)?

  2. 如何告诉 WiX 将这些文件打包到 MSI 文件中,以便用户只需下载 1 个文件?

【问题讨论】:

  • 你已经从这里得到了你已经完成的事情吗? wix.sourceforge.net/manual-wix3/install_dotnet.htm
  • 您使用的是什么版本的 WiX?
  • 这个问题实际上是关于 msbuild "GenerateBootstrapper" 任务,而不是 wix。 wix 项目文档指出了这个方向,因为他们自己的“烧录”引导程序还没有准备好。

标签: .net msbuild installation wix windows-installer


【解决方案1】:

我如何让它只带入版本 3.5(这样用户就不必安装 100+ MB 的文件)?

您提到那里有“4 个不同版本”的 .NET。实际上只有 3 个:Dot​​NetFX20、DotNetFX30 和 DotNetFX35 以及一些 Windows 更新。原因是 .NET 3.5 和 .NET 3.0 实际上大多是在 .NET 2.0 框架库和运行时之上的附加版本。

换句话说,.NET 3.0 和 .NET 2.0 都是 .NET 3.5 的先决条件。如果您的应用程序面向 .NET 3.5,则需要所有这些文件。

但是,某些应用程序只需要 .NET 3.5 的子集,称为 .NET 3.5 client profile。您可以通过检查 Visual Studio 项目的构建选项中的“仅客户端框架”复选框来尝试此操作。

如果您的应用程序仍然可以构建并使用客户端配置文件正常工作,那么您可以将“Microsoft.Net.Framework.3.5”更改为“Microsoft.Net.Client.3.5”。这只有 28MB。

我如何告诉 WiX 打包这些 文件到 MSI 文件中,这样 用户只需下载 1 个文件?

先决条件需要在 MSI 启动之前安装,因此它们不能成为 MSI 的一部分。但是,您可以做相反的事情:将先决条件和 MSI 打包在一个自解压存档中,例如与WinZip Self-Extractor。自解压档案可以调用解压后的 setup.exe。

【讨论】:

    【解决方案2】:
    1. 我认为您最好为引导程序创建一个单独的项目。如果网络安装就足够了,下面的项目模板应该可以工作:

      <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
      <ItemGroup>
          <BootstrapperFile Include="Microsoft.Windows.Installer.3.1">
              <ProductName>Windows Installer 3.1</ProductName>
          </BootstrapperFile>
          <BootstrapperFile Include="Microsoft.Net.Framework.3.5.SP1">
              <ProductName>.NET Framework 3.5 SP1</ProductName>
          </BootstrapperFile>
      </ItemGroup>
      <Target Name="Bootstrapper">
          <GenerateBootstrapper
              ApplicationFile="MyProject.msi"
              ApplicationName="MyProject"
              BootstrapperItems="@(BootstrapperFile)"
              OutputPath="$(OutputPath)"
              Culture="en-US"
              CopyComponents="true"
              ComponentsLocation="HomeSite"
              Path="$(BootstrapperPath)" />
      </Target></Project>
      
    2. WiX 团队正在开发一个新的引导程序 Burn,但在它准备好用于生产之前,您可以使用其中一种(商业)解决方案来构建一个自动运行“setup. exe”。

    【讨论】:

    • 网络安装没问题。我用上面的内容修改了我的项目文件,但它没有提示我安装 Windows 安装程序,.Net 3.5。我很肯定 .Net 还没有在机器上,因为我刚刚进行了全新安装(Windows 7 Ultimate)。我也没有在卸载程序列表中看到 .Net(虽然那里只有 1 项,所以也许 Windows 正在保护我免受我自己的伤害)。我复制到测试机器的只是 msi 文件。我需要其他东西来进行网络安装吗?
    • 我应该注意我只更改了 ApplicationFile 和 ApplicationName 属性。我留下的其他一切都一样。我将 ApplicationFile 设置为我的 msi 文件的名称(我没有添加路径),并将 Application Name 设置为我的应用程序的名称,但我不知道这是否应该与其他任何内容相对应。我只是写了看起来正确的东西。
    • 您需要上述项目应已创建的引导程序 (setup.exe),然后在运行 MSI 之前加载先决条件 (.NET)。
    • 当我运行 setup.exe 时,它​​只会启动我的安装程序。它对 .Net 没有任何作用。我不知道从这里去哪里。
    • 我想我知道出了什么问题,在这里。我在 Windows 7 机器上运行我的安装程序,它显然会安装 .Net 3.5,这就是为什么当我的安装程序启动时我什么都看不到的原因。如果我在较旧的操作系统上测试但它不起作用,我会回帖。
    【解决方案3】:

    回答您问题的第 2 部分:

    引导程序的想法是提供一个没有太多(如果有的话)依赖项的 .exe。这确保您还可以引导 Windows Installer 之类的东西。因此,引导程序是包含或下载所需文件的 .exe。

    这还可以确保当您已经安装了某些组件时,它不会再次被下载。由于这个原因,您不能将所有内容打包在一个 msi 中,而且这意味着当 .NET 有安全修复时,必须对其进行修补。当使用自己的安装程序安装 .NET 时,Microsoft 可以为其发布补丁

    【讨论】:

      【解决方案4】:

      查看 dotNetInstaller http://dotnetinstaller.codeplex.com。它是一个安装引导程序,因此您可以使用它来检查和安装应用程序的依赖项。您还可以嵌入安装程序以生成单个 setup.exe。这是他们帮助文件“分发具有所有先决条件的单个、压缩、可执行的打包设置”的摘录。

      【讨论】:

        猜你喜欢
        • 2014-04-14
        • 2013-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-13
        • 1970-01-01
        • 2011-06-10
        • 1970-01-01
        相关资源
        最近更新 更多