如何制作一个简单包装 EXE 文件的 MSI

2024-05-15

经过大量实验后,我得出的结论是 Windows Installer 是一种糟糕的技术。但客户需要 MSI 文件。

那么,如何创建一个 MSI 文件,将 EXE 文件提取到临时目录,并使用与传递给 EXE 文件相同或相似的选项运行它?

MSI 的选项在中进行了解释Msiexec(命令行选项) http://technet.microsoft.com/en-us/library/cc759262.aspx(MSI 的低级“运行”是 msiexec 选项 package.msi)。

编辑:mjmarsh 的 WiX 解决方案看起来很有效。我只是还没有机会尝试(关键时刻)。如果有效的话我会接受。

编辑:它不起作用。缺失的部分:有人值守/无人值守似乎不可用。

不管怎样,唯一让这个工作起作用的是自定义操作杀死它的父进程!

编辑:所以有人发布了一个进一步的答案,将整个事情包装为安装后自定义操作。理论上是可能的,但由于可能需要重新启动(感谢 MS 的 .NET 4 有时需要重新启动),我们必须进行进一步的黑客攻击。所以从优势矩阵来看:

Transparency: No. One big custom action.
Customizability: No.
Standardization: No. 
Management and reporting: No. Appears to work but will not.
Security: No benefit.
Validation: No. The hackery required to survive reboot makes this sure to not work.
Resiliency: Completely defeated.
Rollback: No. Rollback didn't work when we were using MSI anyway.
Patching & Updates: No. We have a local solution anyway.
Logging: No. Appears to work but will not.

没有意义。


嗯,有免费方式和$$$方式。我无法在这里记录所有内容,但这应该可以帮助您开始。

顺便说一句,是的,Windows Installer 是一项令人抓狂的技术。很多时候我认为一项任务很简单,但实际上却变得很复杂。你一定要沉浸其中才能理解它。

无论如何,这里是:

免费:WiX (here http://wix.sourceforge.net/)

这是一个免费工具,用于从一组 XML 配置文件生成 MSI 文件。我会让你在网上寻找教程,但关键是:

您可以使用 WXS 文件中的以下标记将 EXE 压缩到安装程序中:

<Binary Id="MYEXE" src="<path to my exe?"/>

然后您可以创建一个启动 EXE 文件的自定义操作:

<CustomAction Id="EXECA_CALLMYEXE" Return="check" Execute="deferred" BinaryKey="MYEXE"
      ExeCommand="my command line"/>

然后将您的自定义操作插入到InstallExecuteSequence在适当的位置(我几乎总是在InstallInitialize and InstallFinalize)

<InstallExecuteSequence>
   <Custom Action="EXECA_CALLMYEXE" After="InstallInitialize"><![CDATA[Not REMOVE]]></Custom>

$$$:获取InstallShield (HERE http://www.installshield.com/)

首先创建一个“Basic MSI”项目并确保你说你想要没有生成setup.exe。您可以在发布设置中进行设置。

然后你基本上会做与 WiX 相同的事情,但你有一个 UI。

  • 您可以使用直接编辑器指定辅助 EXE 文件并将 EXE 文件放入“二进制”表中
  • 您可以创建自定义操作以从左侧树中的“自定义操作”节点启动该 EXE 文件
  • 您可以通过选择“安装序列”并将其放入InstallExecuteSequence介于两者之间InstallInitialize and InstallFinalize正如我之前所说。

抱歉,我无法提供更详细的信息,但这应该是一个好的开始。

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

如何制作一个简单包装 EXE 文件的 MSI 的相关文章

  • 如何开始使用“scipy”

    我之前安装过 Python 3 4 2 和 3 5 2 在这两种情况下 我都可以在 Idle 中涉足编写和测试代码 这给了我两个窗口 一个用于代码的 运行 窗口 一个用于交互和测试的 Shell 窗口 输出 抱歉 不确定术语是否正确 现在我
  • Mac 10.8.3 上的 fltk 安装

    我正在挣扎fltk在我的 Mac 上安装 我想在Xcode 4 下载文件并解压缩后 尝试按照说明操作 2 3 Configuring FLTK Stay in your FLTK source code directory Type aut
  • 如何在anaconda python 3.6上安装tensorflow

    我使用 anaconda 包安装了新版本的 python 3 6 但是我无法安装张量流 总是收到这样的错误 tensorflow gpu 1 0 0rc2 cp35 cp35m win amd64 whl 在此平台上不受支持 如何在 ana
  • 从 VS.NET 2008 转换到 2010 时 Windows 服务安装项目出现问题

    我正在尝试将解决方案从 VS NET 2008 转换为 2010 该解决方案包括一个 Windows 服务项目和一个安装 Windows 服务的安装项目 我在编译安装项目时遇到问题 我已经尝试按照教程从头开始几次here http msdn
  • Magento 设置脚本中的 ALTER TABLE 不使用 SQL

    乔纳森 戴 https stackoverflow com users 336905 jonathan day says 更新不应采用以下形式 SQL命令 我没遇到过 任何 DDL 或 DML 语句不能 通过 Magento 的配置执行 结
  • 在 Visual Studio 安装程序中使用 Windows 环境变量作为注册表值

    嘿 我想使用 Windows 环境变量作为注册表项的值 不幸的是我不能简单地写一些像 systemroot system32 MyScreensaver scr 正如您所猜测的 我想将一些注册表值指向我自己的应用程序 例如自动启动和屏幕保护
  • 我无法让 ruby​​ 开发工具包适用于 Windows XP

    所以 我一生都无法让它正常工作 我的最终目标是安装 dbd odbc gem 并使其正常工作 从我读过的多篇文章来看 我需要安装ODBC 绑定 http www ch werner de rubyodbc 对于 ruby 以及 dbd od
  • 如何使用 WiX 卸载时终止进程

    我正在使用 Wix 创建 msi 安装文件 当我卸载应用程序时 它仍然在工作 并且我可以在任务管理器中看到它 我已经尝试过自定义操作的延迟执行 如 Wix 文档中所述 https wixtoolset org documentation m
  • 我可以在我的机器上同时安装 python 2.7 和 3.5 的tensorflow吗?

    目前我通过 Anaconda 在我的机器 MAC OX 上安装了 Python 2 7 Python 3 5 Tensorflow for Python 3 5 我也想在我的机器上安装 Tensorflow for Python 2 7 当
  • 如何在 erlang 中安装模块?

    我是 Erlang 新手 想知道如何安装第三方模块以在我的 Web 应用程序中使用 您将这些文件放在哪里以及执行什么类型的命令 如果您希望在系统范围内安装第 3 方库 例如 Mochiweb 最好将其设置在 ERL LIBS 环境变量下 我
  • Android 应用程序安装失败:包 com.my.app 在条目 AndroidManifest.xml 处没有证书

    在 Android Studio 中 我生成了带有密钥库等的签名 APK 将 APK 安装到设备上时失败 并显示 无法安装应用程序 并且在 Android Monitor 中我看到以下行 Package com my app has no
  • 捕获数据包后会发生什么?

    我一直在阅读关于网卡捕获数据包后会发生什么的内容 我读得越多 我就越困惑 首先 我读过传统上 在网卡捕获数据包后 它会被复制到内核空间中的一个内存块 然后复制到用户空间 供随后处理数据包数据的任何应用程序使用 然后我读到了 DMA 其中 N
  • 如何在 Windows 上为 GeoDjango 安装 GEOS

    我正在使用 Python 2 5 Django 1 2 MySQL 和 Apache 启动一个 GeoDjango 项目 该项目将上传到 Linux 服务器 但开发将在 Windows 上进行 问题是我无法通过安装 GEOS 这是怎么完成的
  • 无法在 Windows 10 上安装 Postgresql

    我第一次尝试在我的 Windows 10 计算机上安装 postgreSQL 安装结束时出现两个错误 1 集群初始化期间发生非致命错误 请检查 C users abc AppData Local Temp 中的安装日志了解详细信息 2 运行
  • Qt 创建者 4.8.4。 Windows 7 - 64 位安装

    我在 QT 方面遇到了一些困难 我需要在学校使用它来完成一些 GUI 应用程序 我最近完成了以下步骤 1 mingw get inst 20120426 exefrom 来源锻造 http sourceforge net projects
  • 对 .NET Windows 安装程序应用程序执行注册表搜索

    我有一个 NET winform 安装程序应用程序 在安装之前 我会进行注册表搜索以检查计算机上是否安装了 MS Access Runtime 搜索目标机器 搜索目标机器的属性 启动条件 启动条件的属性 但是我想避免对路径进行硬编码 例如
  • Nuxt.js 安装错误

    我已经尝试安装 nuxt app 应用程序几次了 我已经在终端中使用 npm 和yarn 并以管理员身份在 powershell 中运行了它 我在创建应用程序时继续遇到错误 我在下面包含了错误日志以供参考 我think认为问题出在这个抛出错
  • Eclipse 安装程序内部错误:注册表目录不可用

    我曾经像平常一样使用 Oomph Eclipse 安装程序 直到我更改了注册表中的用户配置文件 以删除烦人的空格 从那时起 除了 eclipse 安装程序之外 我没有遇到任何问题 它不断尝试在旧用户文件夹中查找注册表目录 该文件夹已不存在
  • 使用 Brew 安装 OpenCV 永远不会完成

    所以我尝试使用 Homebrew 安装 opencv 但它不起作用 我用了brew tap homebrew science进而brew install opencv发生的情况是 gt Installing opencv from home
  • 为什么 Python 中的“pip install”会引发语法错误?

    我正在尝试使用 pip 安装软件包 我试着跑pip install从Python shell 但我得到了SyntaxError 为什么我会收到此错误 如何使用 pip 安装软件包 gt gt gt pip install selenium

随机推荐