- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好的,所以我在这一点上完全迷失了,我通常是一个前端开发人员,根据需要了解一点 php。不过,我有一个客户端,它需要一个下载门户,用户输入他们的电子邮件地址进行下载。这很容易,除了一次捕获。应用程序需要将该电子邮件存储在 xml 文件中。
我整天都在谷歌上搜索试图解决这个问题,可能只是我不知道要搜索什么,因为我是在 mac 上工作的前端 Web 开发人员。 PHP 安装在 CENT OS 网络服务器上,该服务器需要能够提取 msi、插入 xml 文件,然后重新编译以提供给用户。
任何帮助或指导都会非常有帮助。谢谢!
最佳答案
Windows 安装程序包 (.MSI) 是 OLE/COM 结构化存储。 Microsoft 提供了一个 Win32 API (MSI.dll) 和一个 COM 自动化接口(interface) ("WindowsInstaller.Installer")。
在 Unix 上,大部分 Win32 API 已被移植到 Wine。
现在我从来没有这样做过,但我看到了一些很有希望的东西。有一个名为 OpenMCDF 的开源项目.它是用 Visual Studio/.NET 编写的,但声称它支持 Mono。其中有一个测试应用程序(文档资源管理器),当你说 File |打开它显示 .MSI 作为下拉选项,所以他们至少在考虑它。
无论如何,在源代码中,我看到了流和存储的类。准备好 MSI,您会发现文件被压缩到(Microsoft)CAB 文件中,并通过将其插入流中嵌入到 MSI 中。
在这种情况下,我可能会使用更新的 XML 文件创建一个新的文件柜,将其记录在媒体表中并更新文件表以反射(reflect)新的序列号、文件大小和媒体 ID。
对于 MSI 专家来说,这在 C# 中是微不足道的。对于 .NET 专家来说,这真的很难。对于那些既不想在 CentOS 上用 PHP 做这件事的人……祝你好运。
另一种方法是使用未压缩的文件构建 MSI,然后将其用作模板来覆盖文件并构建自解压 EXE。这对你来说可能会容易得多。只需确保 MSI 和 XML 被缓存以进行修复事务。
或者只是设置一个 Windows 服务器并将构建传递给它并在完成后将其取回。
关于php - 使用 PHP 编辑 Windows 安装程序 (.msi),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15305448/
我的安装程序用 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 列中的单个值(不带冒
我是一名优秀的程序员,十分优秀!