Bootstrapper:如何在单个 .msi 包中编译应用程序和先决条件?

2024-02-15

我正在为该应用程序创建一个 .msi 包,该应用程序具有安装先决条件。 我使用 Visual Studio 2005 Bootstrapper 来完成此任务。 为此,我做了以下工作: 找到文件夹 C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\ 并为我的先决条件创建一个文件夹(使其结构与“dotnetfx”相同);创建了“product.xml”和“package.xml”并将它们放置在适当的位置。到目前为止,我保持 xml 文件非常简单来测试安装:

产品.xml

<?xml version="1.0" encoding="utf-8"?>
<Product ProductCode="MyPrereq" xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper">
  <PackageFiles CopyAllPackageFiles="false">
    <PackageFile Name="MyPrereq.exe" />
  </PackageFiles>
  <InstallChecks>
  </InstallChecks>
  <Commands Reboot="None">
    <Command PackageFile="MyPrereq.exe" EstimatedInstallSeconds="90">
      <InstallConditions>
      </InstallConditions>
      <ExitCodes>
    <ExitCode Value="0" Result="Success"/>
        <DefaultExitCode Result="Fail" String="GeneralFailure" FormatMessageFromSystem="true" />
      </ExitCodes>
    </Command>
  </Commands>
</Product>

包.xml

<?xml version="1.0" encoding="utf-8"?>
<Package Name="MyPrereq" Culture="Culture" xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper">
  <Strings>
    <String Name="Culture">en</String>
    <String Name="DisplayName">MyPrereq</String>
    <String Name="GeneralFailure">A fatal error occurred. The installation failed.</String>
  </Strings>
</Package>

现在我可以从列表中添加先决条件并构建我的安装项目。

问题:

构建输出是“setup.exe”、“MyApp.msi”包,以及包含“MyPrereq.exe”的名为“MyPrereq”的子文件夹。

我希望构建创建一个“setup.exe”和一个“MyApp.msi”,其中包含“MyPrereq”,没有其他文件/目录。

我知道 .NET 框架是我的应用程序的另一个先决条件,并且它包含在同一个 .msi 中,因此应该可以以某种方式实现。

我怎样才能实现这个目标?


您可以使用 IExpress(Windows 附带)等工具创建自解压安装程序,其中包含单个可执行文件中的所有文件(请参阅这个帖子 https://stackoverflow.com/questions/535966?sort=votes).

您不能让 MSI 文件安装其自己的先决条件。首先,因为 Windows Installer 本身是先决条件(并且必须由非 MSI exe 安装),其次因为 Windows Installer 安装是事务性的,并且不支持 MSI 文件的链式执行。这基本上意味着一个 MSI 安装无法启动另一个 MSI 安装。因此,任何先决条件都必须由单独的引导程序安装(顺便说一句,安装不再是事务性的 - 如果 MSI 安装失败,先决条件将不会被卸载)。

不过,对于引导程序机制似乎存在一个基本的误解。引导程序当前只能由 Visual Studio 或 MSBuild 生成。据我所知,WiX 是不可能的。在 MSBuild 中查找GenerateBootstrapper 任务(请参阅这个帖子 https://stackoverflow.com/questions/427775/wix-and-net-framework-pre-requisites).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bootstrapper:如何在单个 .msi 包中编译应用程序和先决条件? 的相关文章

  • App.Config 应该是应用程序的伴随文件还是放在自己的组件中?

    当我创建 Windows Installer 程序包 例如使用 WiX 并安装该应用程序时App exe以及App exe config配置文件应该有自己的组件还是应该是应用程序可执行文件的伴随文件
  • 有符号和无符号的位移操作

    我正在对 int 进行位移操作 但很惊讶它没有按预期输出 int i res i 0x80000000 res i gt gt 1 results in 0xc0000000 res unsigned int i gt gt 1 resul
  • 更改 Visual Studio 2005 中的应用程序图标?

    我想为我的游戏的演示版本使用不同的图标 并且我正在使用与完整版本不同的构建配置来构建演示 使用预处理器定义来锁定某些内容 使用不同的图形 有没有办法让 Visual Studio 在演示配置中为应用程序图标使用不同的图标 但继续为完整版本的
  • 如何在项目中实现预编译头

    我了解预编译头背后的目的和推理 然而 实施时有哪些规则呢 根据我的理解 事情是这样的 将您的项目设置为使用带有 YU 指令的预编译头 创建 stdafx h 文件并将其设置为预编译头 将此作为每个 h 文件中的顶部包含语句 这是正确的吗 您
  • 如何从命令行列出已安装的 MSI? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我们最近将 Windows 软件包从 RPM cygwin 切换到 MSI wix 拥有原生包装是一个非常受欢迎的变化 我们打算坚持下去 然而 MSI
  • SetThreadName 不适用于 Visual Studio 2005

    设置线程名称 http msdn microsoft com en us library xcb2z8hs 28v VS 71 29 aspx当使用 Visual Studio 2005 时 不会设置线程名称 如下所示 DWORD thre
  • MessageBox.Show() 字体

    有没有办法可以更改 MessageBox Show 中的字体类型以获得更大的尺寸 粗体 斜体样式 您始终可以创建自己的 MessageBox 创建一个新的 Windows Forms 类 using System using System
  • Windows 安装程序和安装应用程序合并到一个文件中?

    我使用 Visual Studio 在 C 中编写了一个应用程序 我创建了一个项目设置文件 该文件在我的调试中为我创建了文件 Windows Installer 和安装应用程序都是必需的 但我想将它们合并为一个 就像当您下载应用程序时 安装
  • 如何在 wix .wxs 文件中指定

    我想在 Wix 安装程序的 wix wxs 文件中将属性指定为受限属性
  • Drupal - 使用引导程序检查 Drupal 之外的登录用户不起作用

    我正在绞尽脑汁地想弄清楚这个问题 在 Drupal 目录之外时 我无法让 Bootstrap 正常工作 如果我在 Drupal 目录中运行此代码 它可以正常工作 但向上一级不起作用 我的 Drupal 路径是 public html dru
  • WiX - 通过检查修订来防止降级

    我正在寻找一种方法来防止我的应用程序降级 但 问题 是 我必须检查修订号 例如 安装 1 0 0 1 时应该可以安装 1 0 0 2 但安装 1 0 0 2 时不应该安装 1 0 0 1 我知道 Element MajorUpgrade 仅
  • Wix - 自定义安装目录

    我使用的是 Wix 3 x 用户应该能够选择目标目录 我的Setup wxs目前是这样的 http pastebin com uH1EjbDQ http pastebin com uH1EjbDQ 询问用户自定义目标目录的最简单方法是什么
  • 对 .NET Windows 安装程序应用程序执行注册表搜索

    我有一个 NET winform 安装程序应用程序 在安装之前 我会进行注册表搜索以检查计算机上是否安装了 MS Access Runtime 搜索目标机器 搜索目标机器的属性 启动条件 启动条件的属性 但是我想避免对路径进行硬编码 例如
  • 如何禁用恢复 Visual Studio 安装程序项目丢失的文件?

    我创建了一个使用来自暴雪 API 服务的图像的程序 我为该程序创建了一个安装程序 并将图像放置在 用户的应用程序数据文件夹 中 安装非常好 图像被解压到文件夹 AppData Roaming MyApp 中 如果需要删除图像 程序将从暴雪服
  • WIX 工具集 - 自定义操作命令无法正确检测 Windows 10 版本

    我有一个安装程序 可以部署并运行单独的 exe文件以将驱动程序部署到系统 不幸的是 微软似乎已经放弃了对VersionNTWindows 10 及更高版本中的宏 所以我实施了另一篇文章中建议的方法 https stackoverflow c
  • 禁用 WerFault.exe/“应用程序已停止工作”崩溃对话框

    我有一个开发工具在启动时崩溃 我看不到它抛出的任何错误消息 也没有机会调试它 因为它显示了崩溃程序的 Windows 7 对话框 其中显示 Windows 正在检查寻求解决方案 我想让我的老派大屁股断言对话框回来 有一个大的 调试 按钮 我
  • 如何创建具有有效签名的预配置安装程序(MSI 或 EXE)?

    我们希望用户下载我们的 Windows 软件的预配置安装程序 预配置数据包含基于用户帐户数据的设置 定制将在 Linux 上运行的 Java 服务器中完成 我们需要对这些安装程序进行数字签名 不幸的是 由于安全政策的原因 我们无法在这些服务
  • 从 C# 调用 MsiEnumRelatedProducts 崩溃

    我在从 C 调用 MsiEnumRelatedProducts 时遇到了无穷无尽的麻烦 我尝试了 p invoke 定义的几种变体 但没有成功 out 和 ref 我认为问题在于最后一个参数 它是一个 LPTSTR 应该指向一个 39 个字
  • 调试器忽略动态加载的 DLL 中的错误

    我有一个与自编码 DLL 的调试相关的非常奇怪的问题 我有一个 MFC 驱动的基于对话框的应用程序 几个静态链接的项目和几个在运行时加载的 DLL 项目 我在调试中构建解决方案 运行应用程序 然后我可以轻松调试这些 DLL 项目 现在问题来
  • 在生产服务器上安装 VS.NET 是否安全且可以接受? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 通常 我们在生产服务器上安装 VS NET 以便在必要时轻松解决我们产品的问题 这是好主意还是坏主意 调试和开发应该在 安全 环境中完成 这不是

随机推荐

  • 通过 Socket.io 更新 React 状态

    我的 React 组件使用来自 socket io 的数据作为状态 我不确定如何在更新数据时更新状态而不重新渲染整个组件 示例代码 var socket io var data components key name markup sock
  • nginx 将 POST 请求重定向到 GET 请求

    我有 Rails 4 1 应用程序运行puma网络服务器 我使用 nginx 作为代理服务器 几天前 一切都进展顺利 我更新了我的应用程序 突然有些POST请求开始重定向到相同的网址 但作为GET要求 我尝试回滚到以前的工作版本 但没有成功
  • 在 C# 中以编程方式编译打字稿?

    我正在尝试用 C 编写一个函数 该函数接受包含打字稿代码的字符串并返回包含 JavaScript 代码的字符串 有这方面的库函数吗 您可以使用Process要调用编译器 请指定 out file js到临时文件夹并读取编译文件的内容 我做了
  • 如何找到所有兄弟情谊字符串?

    我有一个字符串和另一个包含字符串列表的文本文件 当两个字符串按字母顺序排序后完全相同时 我们将它们称为 兄弟字符串 例如 abc 和 cba 会被排序为 abc 和 abc 所以原来两者是兄弟关系 但 abc 和 aaa 则不然 那么 有没
  • Windows 上 Python 3.1 的 SendKeys

    最新的 Python Sendkeys 模块适用于 Python 2 6 我无法自己升级它 因为它需要重新编译 C 模块 有谁知道将密钥发送到窗口的相当简单的替代方法 使用 win32ui FindWindow 我可以找到正确的窗口 然后使
  • C#/.NET 中方法的自动记录异常 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想要一些工具 最好是能够插入 VS 2008 2010 的工具 它将遍历我的方法并添加有关它们可能抛
  • cv::Mat 的序列化给出了奇怪的结果

    我目前正在尝试序列化和反序列化 openCV Mat 以便我可以使用 Boost 将帧从客户端发送到服务器 我遇到的问题是 当我反序列化图像时 它会给出不同颜色的重复重叠图像 我不知道为什么会发生这种情况 任何帮助将非常感激 很抱歉我无法发
  • jquery事件优先级

    我有两个函数挂在submit表单的事件 每个功能都位于不同的位置 并且一个功能可以影响另一个功能 如何强制这些函数之一以最低优先级挂钩 即最后执行 我能想到的有四种方法 您自己管理回调 并且只有一个事件处理程序以所需的顺序调用函数 在应该最
  • 多对多关系、复选框的 CRUD 视图

    我很难弄清楚我需要做什么才能让它发挥作用 我正在使用 EF 学习 ASP NET MVC CodeFirst 如果我创建一个模型 我可以简单地为该模型添加一个控制器 并添加脚手架来创建自动处理 CRUD 的视图 但现在我有两个模型 项目和类
  • 如何隐藏跟踪像素

    不幸的是 我有一个跟踪像素 导致页脚底部出现一个小白条 隐藏像素的最佳方法是什么 我正在考虑将它 和我的其他像素 放入position absolutediv 它正确隐藏了栏 但我不确定这是否会阻止像素在某些浏览器上工作 From 谷歌支持
  • MVC3如何在控制器的类中发布列表?

    我有一堂课 public class CarList public int quantity get set public List
  • 基于Radius Google Maps iOS SDK更改相机变焦

    我正在开发一个应用程序 它根据当前位置周围的半径显示某些标记 半径在100 5000米之间 我用一个改变半径UISlider并重新绘制GMSCircle 我的问题是我想根据滑块值更新相机变焦 但我不知道要按哪个比例划分 这就是我在中创建相机
  • Spring JPA @Query JPQL 失败并显示“意外标记:DATE”

    我正在使用 Spring Data JPA 我想查询我的结果并过滤它们 在 SQL 中 我会像这样编写查询 针对 DB2 数据库 SELECT FROM CAR WHERE ACCIDENT YEAR IS NULL OR BUY YEAR
  • GKE VPC 本机集群以及与 Cloud SQL 的连接

    GKE 集群中的 VPC Native 是什么 VPC Native 禁用 GKE 集群 是否限制通过私有 IP 连接到 Cloud SQL 我们有一个 GKE 集群 其 VPC Native 被禁用 并且我们在 cloud sql 中将
  • 如何在 Python 中使用 OpenCV 存储网络摄像头视频

    我有一个 Python 脚本 它可以读取我的网络摄像头并将其显示在窗口中 我现在想存储结果 所以如下本教程 http opencv python tutroals readthedocs io en latest py tutorials
  • EJB 和 CDI bean 序列化的最佳实践

    我还没有遇到任何与序列化相关的问题 但 PMD 和 Findbugs 检测到一系列有关序列化的潜在问题 一个典型的情况是注入的记录器被检测为不可序列化 但还有更多 EntityManager和一些 CDI 豆 我还没有找到任何关于如何正确处
  • Swift 中 UITableView 的奇怪行为

    我有一个带有两个标签和一个图像的自定义单元格 我从互联网上收到一些 Json 数据 一切正常 每个单元格都填充相应的数据 我添加了一个新标签 必须像其他标签一样填写该标签 这是数据 let cell tableView dequeueReu
  • 查找不存在连接的记录

    我有一个范围来限制所有questions用户是否对其进行了投票 在模型中 scope answered by lambda u joins votes where votes user id u id scope unanswered by
  • 为什么在 32 位应用程序中使用 WIC 在 Windows 7 32 位中失败?

    我有 Win32 C 示例应用程序 它使用Windows 图像组件 http msdn microsoft com en us library windows desktop ee719654 28v vs 85 29 aspx在 Visu
  • Bootstrapper:如何在单个 .msi 包中编译应用程序和先决条件?

    我正在为该应用程序创建一个 msi 包 该应用程序具有安装先决条件 我使用 Visual Studio 2005 Bootstrapper 来完成此任务 为此 我做了以下工作 找到文件夹 C Program Files Microsoft