【问题标题】: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 服务器并将构建传递给它,并在完成后将其取回。

【讨论】:

    猜你喜欢
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 1970-01-01
    • 2011-10-15
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多