0

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

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

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

4

1 回答 1

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 服务器并将构建传递给它并在完成后将其取回。

于 2013-03-10T13:05:36.483 回答