【问题标题】:Edit Windows Installer (.msi) using PHP使用 PHP 编辑 Windows 安装程序 (.msi)
【发布时间】:2013-03-10 21:05:36
【问题描述】:
好的,所以我现在完全迷失了,我通常是一个前端开发人员,根据需要了解一点 php。不过,我有一个客户端,它需要一个下载门户,用户输入他们的电子邮件地址进行下载。这很容易,除了一次捕获。应用程序需要将该电子邮件存储在 xml 文件中。
我整天都在谷歌上搜索试图解决这个问题,可能只是我不知道要搜索什么,因为我是在 mac 上工作的前端 Web 开发人员。 PHP 安装在 CENT OS 网络服务器上,需要能够提取 msi、插入 xml 文件,然后重新编译以提供给用户。
任何帮助或指导都会非常有帮助。谢谢!
【问题讨论】:
标签:
php
centos
windows-installer
【解决方案1】:
Windows 安装程序包 (.MSI) 是 OLE/COM 结构化存储。 Microsoft 提供了一个 Win32 API (MSI.dll) 和一个 COM 自动化接口 ("WindowsInstaller.Installer")。
在 Unix 上,大部分 Win32 API 已被移植到 Wine。
现在我从来没有这样做过,但我看到了一些很有希望的东西。有一个名为OpenMCDF 的开源项目。它是用 Visual Studio / .NET 编写的,但声称它支持 Mono。其中有一个测试应用程序(文档资源管理器),当你说 File |打开它会显示 .MSI 作为下拉选项,所以他们至少在考虑它。
无论如何,我在源代码中看到了流和存储的类。准备好 MSI,您会发现文件被压缩到(Microsoft)CAB 档案中,并通过将其插入流中嵌入到 MSI 中。
在这种情况下,我可能会使用更新的 XML 文件创建一个新的文件柜,将其记录在媒体表中并更新文件表以反映新的序列号、文件大小和媒体 ID。
对于 MSI 专家来说,这在 C# 中是微不足道的。对于 .NET 专家来说,这真的很难。对于那些既不想在 CentOS 上用 PHP 做这件事的人……祝你好运。
另一种方法是使用未压缩的文件构建 MSI,然后将其用作模板来覆盖文件并构建自解压 EXE。这对你来说可能会容易得多。只需确保 MSI 和 XML 被缓存以进行修复事务。
要么这样,要么只是设置一个 Windows 服务器并将构建传递给它,并在完成后将其取回。