在需要时从 Web 自动安装 .net Framework 4.0,并安装复杂的文件列表

本文关键字:安装 复杂 列表 文件 Framework net Web | 更新日期: 2023-09-27 18:30:35

我有一个安装项目已经完成,其中包含多个文件,DLL,Windows Forms App和Windows服务。一切都是用C#(.net)编写的。

我使用 WiX 来配置 msi 安装,现在文件是这样的:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Product Id="*" Name="App Name" Language="1033" Version="1.0.0"
           Manufacturer="Company Name" UpgradeCode="GUID-HERE">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
    <Icon Id="InstallIcon" SourceFile="msiicon.ico" />
    <Property Id="ARPPRODUCTICON" Value="InstallIcon" />
    <Media Id="1" Cabinet="SingleCab.cab" EmbedCab="yes" />
    <Feature Id="ProductFeature" Title="Title" Level="1">
      <!-- Some features here-->
    </Feature>
    <UI><!-- Many UI here--></UI>
  </Product>
  <!-- Some fragments tag here -->
</Wix>

但是我需要插入 .net Framework 4.0 的检查。如果未安装 .net Framework 4.0,请自动运行 Web 安装。

所以我搜索并找到了许多类似的例子来说明如何做到这一点。我找到的几乎所有例子都涉及标签Bundle,Chain和MsiPackage。

的问题是如何将我所拥有的与我找到的示例相结合。

请参阅,在所有示例中(从此处获取下一行),合并项目都发生在以下行中:

<MsiPackage
  SourceFile="$(var.SetupProject1.TargetPath)">
</MsiPackage>

但是我没有Visual Studio项目,我在产品标签中有很多文件。产品标签在<Bundle>内部或<MsiPackage>内不起作用,所以我知道什么?如何将我所有的<Product>内容都放进去。

在需要时从 Web 自动安装 .net Framework 4.0,并安装复杂的文件列表

首先,让我们建立一些基线知识...

WiX项目是Visual Studio项目。Visual Studio 项目是 MSBuild 项目。MSBuild 项目是 XML 文件。通常,MSBuild 项目将其他 MSBuild 项目导入为库(扩展名为 .targets),因为生成项目所需的大多数信息对于相同类型的所有项目(例如 .csproj)都是通用的。MSBuild 项目可以使用 .NET Framework 附带的 msbuild.exe 构建。MSBuild 项目最终执行生成项目的任务。这些任务通常是对命令行工具的调用,或者(如果可用)是对库的等效函数调用。

要使用WiX

源文件,调用WiX的蜡烛.exe和光.exe。要生成一些WiX源文件,可以调用WiX的heat.exe。

WiX提供了MSBuild任务来为你做到这一点。它还提供导入这些任务的 MSBuild 项目模板。您通常使用诸如Visual Studio(非快速)或SharpDevelop(免费)之类的IDE将项目模板转换为项目。但是您可以参考示例手动编写项目文件。同样,可以通过调用 msbuild.exe 来生成此类项目,或者 IDE 可以为您调用 MSBuild。

使用 IDE 编辑 WiX 源文件和项目很方便。可以使用 IDE 的项目设计器或 XML 编辑器编辑项目文件。(在 VS 的解决方案资源管理器中,执行项目卸载,然后执行项目编辑。由于源文件和项目都是 XML,因此 IDE 应根据文件的 XML 架构提供帮助。

许多类型的项目(例如,.csproj和.wixproj)允许项目引用其他项目。项目引用的用途和功能取决于项目的 MSBuild 导入。你可能熟悉 C# 项目中的 C# 项目引用。至少,人们会期望在引用项目之前构建引用项目。

WiX 项目可以引用 .NET 项目(例如 .csproj)或其他 WiX 项目。对于每个项目引用,WiX 会根据引用项目的名称定义一些有用的变量。例如:如果您有 WiX 引导程序项目,它可以引用名为 SetupProject1 的 WiX 安装项目,以便定义var.SetupProject1.TargetPath以便在引导程序源代码中使用。另一个示例:如果您有 WiX 安装项目,它可以引用名为 ConsoleApplication1 的 C# 项目,以便定义var.ConsoleApplication1.TargetPath。在这两个示例中,目标路径很可能因项目配置(例如调试、发布)而异。WiX 根据配置将变量指向引用项目中定义的相应路径。

底线

  1. 产品元素用于 WiX 安装项目;捆绑元素用于 WiX 引导程序项目。(如果不使用项目文件,您将为产品调用一次WiX的命令行工具,为捆绑包调用一次)。
  2. 对于包元素,源文件应该是相应 msi 或 exe 文件的路径。它可以是路径,也可以在蜡烛.exe命令行或通过项目引用定义的变量。
  3. 您可能错过了使用WiX项目和MSBuild的便利性。与所有Visual Studio项目一样,您可以不使用IDE,也可以选择免费或付费IDE。据推测,您已经在为 C# 项目使用 IDE 和 MSBuild。将它们用于WiX项目与将 VB.NET 项目添加到解决方案中没有太大区别。

您应该考虑引用 C# 项目的 WiX 安装程序项目和引用 WiX 安装程序项目的 WiX 引导程序项目。构建解决方案,您就完成了!

(当然,在开发过程中,您可能不希望在解决方案中安装项目。在这种情况下,请使用多个解决方案文件。