- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
微软官方文档在很多地方都提到了一些“安装脚本”。敌人的例子,here :
Instead the installer writes the custom action into the installation script.
我仔细检查了 MSDN 和一些关于 MSI 的书籍 - 找不到明确的定义这个安装脚本
是什么,它与 MSI
引擎有什么关系以及如何正是
installation script can be executed outside of the installation session in which it was written
它是关于此安装脚本
的一些定义和文档,还是一些未记录的MSI
引擎内部构件,仅供引用?
最佳答案
Windows Installer 是一种声明式(相对于命令式)编程语言。您无需使用某种语言编写“脚本”,而是使用表格数据来表达安装。例如考虑表格:
Feature -> Feature Components - Component -Directory
组件 -> 文件
您告诉 MSI,当安装给定功能时,需要安装属于它的组件。安装该组件时,需要创建一个目录并复制一个文件。如果安装程序回滚,则需要删除文件和目录。
这由各种标准操作处理,例如 CreateFolders 和 InstallFiles。我们不编写任何脚本来完成此操作。
但是,实际上有一个脚本。它由 Windows Installer 本身在运行时生成。在任何修改机器状态的标准操作中都有两个不同的阶段:
脚本生成——安装程序仔细考虑需要做什么并动态生成要执行的操作列表
脚本执行 - 安装程序现在正在执行该脚本。注意:这发生在 InstallFinalize 内部
记录您最喜欢的安装程序并开始在其中查找 InstallFiles 操作。您会看到这两个阶段。
在编写您自己的自定义操作时,这是非常重要的事情。有关该主题的更多信息,请参阅:
Installation Phases and In-Script Execution Options for Custom Actions in Windows Installer
关于windows-installer - MSI 中的 "installation script"是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16711018/
我的安装程序用 WiX 语言编码。它支持主要的升级机制。一个特殊的要求是 相同的 MSI 文件将无法安装两次。 现在是棘手的部分:如果用户安装然后再次尝试安装它(UI 模式),安装程序进入维护模式,一
我能否可靠地从 MySQL 等常规 MSI 包创建合并模块,以将其与我自己的安装合并?WiX 有相应的工具,但我应该从这种翻译中期待什么陷阱?从我自己的包安装其他 MSI 包的替代方法是什么? 最佳答
免责声明:我仍然没有超越最基本的WiX教程,因为每次我试图理解这些概念时,我的头开始旋转。 我一直在阅读Is it feasible/sensible to wrap an InnoSetup ins
是否有可能在不使用 PowerShell 安装的情况下从 MSI 文件中检索 MSI 产品代码?我想将 MSI 文件的产品代码与安装在机器上的 MSI 代码进行比较,以确定该文件是否曾经安装过。 最佳
我的 Wix 项目创建 install.msi 和 cab1.cab。我如何才能将所有内容捆绑到 msi 中?我可能会使用 7-zip SFX 来解决这个问题,但我见过其他应用程序只有一个 msi。
大多数人可能已经注意到,在卸载 MSI 软件包时,Windows 会要求提供原始的 .msi。文件。这是为什么? 我只能看到缺点: 对网络变化没有弹性。 对本地磁盘更改没有弹性。 用户的意料之外。 通
我正在寻找一个 C API,它可以获取 msi 路径并返回产品版本(主要版本和次要版本),而无需安装 API。 谢谢,埃坦 最佳答案 我不会使用开放包 - 这是一个静态数据库,因此 MsiOpenDa
我正在使用 VS 2008 为 c# windows 项目创建一个安装程序。我正在尝试编写一个自定义操作,从存储在文件服务器上的 MSI 文件的源目录(例如\server\fileshare\myap
我正在使用 WiX 编写 MSI 安装程序以启动依赖于 MSI 安装的 DLL 的服务。在 Vista 上,DLL 被添加到 MSI 的 InstallFinalize 中的全局程序集缓存中阶段,所以
我的 MSI 安装程序不会在 XP 上注册 DLL。在 Vista 上,除非我是管理员,否则它不会注册。在 Win7 上,它会随机注册 DLL 或不注册。 在 MSI 不会注册 DLL 后,用户被迫转
这是我第一次尝试使用 Windows Installer 来构建安装程序包(我们的客户不希望使用 Wix,我已经广泛使用它)。目前我有一个按预期构建和工作的 MSI。但是,我需要为我编写的程序所需的
我们已从 InstallShield LE 2010 转移到 WiX。 我们的新 WiX 安装程序能够卸载以前的 WiX msi 软件包,但它不会检测到从 IS msi 安装的以前版本的软件。 我们应
我正在使用 WiX制作 MSI安装程序调用另一个 MSI 安装程序。 我可以在 UILevel=5 (Full UI) 模式下解决这种情况。我的解决方案是将 CustomAction 添加到调用另一个
我在安装程序的 Windows 缓存方面遇到了问题。我正在尝试进行升级,每次 Windows 安装程序启动旧版本的安装程序时。当我进行升级时,它提示读取旧版本的 msi 文件时出现问题(因为它不再位于
MSI 的表 - “FeatureComponents”有两列:“Feature_”和“Component_”。我想要做的是一次更改“Feature_”列中的所有值。 IntPtr hDb = Int
作为持续集成测试的一部分,我们正在使用 msi 安装几个网站。 对于每个构建,我们要卸载旧的 msi 并安装一个新的。 问题是在构建服务器完成最新版本并重建系统后,我们没有旧的 msi。 有没有一种方
我有一个场景,要安装两个 MSI 包和一个 MSI 包。 例如,我们有两个产品要安装,即。 Sample1.MSI 和 Sample2.MSI。我们需要将 Sample2.MSI 包嵌入到 Sampl
我在 c# 中从 msi.dll 调用 get_PrimaryKeys() 函数时遇到问题。我想找出给定 MSI 表中的主键是什么。我使用以下代码: Type installerType = Type
更新:我更改了这个问题的标题以反射(reflect)下面一些答案真正需要的内容。 我希望能够在 Linux 中从 Visual Studio 2010 的 native 部署工具中生成的 MSI 获取
在 Windows 安装程序包 (.) 的 DefaultDir 列中,表示目录应位于其父目录中,没有子目录。 并且冒号 (:) 用于分隔目标和源目录名称。 DefaultDir 列中的单个值(不带冒
我是一名优秀的程序员,十分优秀!