使用PHP编辑Windows Installer(.msi)

时间:2013-03-09 00:03:37

标签: php centos windows-installer

好的,所以我完全失去了这一点,我通常是一名前端开发人员,根据需要知道一些php。但是,我有一个客户端需要一个下载门户,用户可以输入他们的电子邮件地址进行下载。除了一个捕获之外,这很容易。应用程序需要将该电子邮件存储在xml文件中。

我一整天都在谷歌上搜索这个问题,可能只是因为我不知道要搜索什么,因为我是在Mac上工作的前端网络开发人员。 PHP安装在CENT OS网络服务器上,需要能够提取msi,插入xml文件,然后重新编译以提供给用户。

任何帮助或指示都会非常有帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

Windows Installer程序包(.MSI)是OLE / COM结构化存储。 Microsoft提供Win32 API(MSI.dll)和COM自动化接口(“WindowsInstaller.Installer”)。

在Unix上,大部分Win32 API都已移植到Wine。

现在我从未这样做过,但我看到了一些有希望的东西。有一个名为OpenMCDF的开源项目。它是用Visual Studio / .NET编写的,但声称它支持Mono。它是一个测试应用程序(文档资源管理器),当你说文件|打开它显示.MSI作为下拉选择,所以他们至少在考虑它。

无论如何,在源代码中,我看到了流和存储的类。准备在MSI上,您会发现文件被压缩到(Microsoft)CAB档案中,并通过将其插入到流中而嵌入到MSI中。

在这种情况下,我可能会创建一个包含更新的XML文件的新文件柜,将其记录在媒体表中并更新文件表以反映新的序列号,文件大小和媒体ID。

对于MSI专家来说,这在C#中是微不足道的。对于.NET专家来说,这真的很难。对于那些既不想在CentOS上用PHP做这件事的人......祝你好运。

另一种方法是使用未压缩的一个文件构建MSI,然后将其用作模板来覆盖文件并构建自解压EXE。这对你来说可能要容易得多。只需确保为修复事务缓存MSI和XML。

或者只是设置一个Windows服务器并将构建传递给它,并在完成后重新选择它。