gpt4 book ai didi

c# - 修改 wix 制作的 bundle 二进制文件

转载 作者:太空宇宙 更新时间:2023-11-03 13:03:28 25 4
gpt4 key购买 nike

这是我的情况。我有一个带有自定义安装程序 UI 的 WiX bundle 。它打包了一个 MSI(没有 UI)。你可以从我的服务器下载那个包。我想在下载之前修改该包,以将服务器的当前地址传递到 MSI。 (MSI 设置为将服务器地址作为参数并将其写入 app.config。)

我知道这可以使用 Microsoft.Deployment.WindowsInstaller 库直接在 MSI 上完成(尽管我不确定我是否可以在签名的 MSI 和 bundle 上这样做)。

这些选项中的哪一个是实现此目标的最佳方式?

  1. 在包中进行二进制替换。 (我试图在捆绑二进制文件中找到服务器参数。我看不到任何此类信息。)

  2. 使用 CodeDom 将捆绑 EXE 重新打包为新的 .NET EXE。新的 EXE 包含作为嵌入式资源的原始包,提取到临时文件并运行它。这是我目前的方法,但要正确设置所有属性并将资源一并进出是很痛苦的。我还没有成功。

  3. 使用 WiX 提取 bundle ,修改源代码,然后重新构建它。我不确定这如何与签名包一起玩。它还需要我在我的服务器旁边安装 WiX。我可以在 bundle 中使用一些 PackageRef 来安装 WiX 本身吗?

  4. 找到 CAB 文件头。提取它。修改微星。替换包中的 CAB 字节。我试过这种方法。它给了我这个错误:无法验证有效负载的哈希值。我看不到散列在包中的何处编码。

  5. 使用其他一些我不知道的二进制操作或 API?我可以使用任何版本的 WiX。

最佳答案

使用 VBScript 或类似的脚本语言来修补 MSI。喜欢这个答案here .但是,您需要在修补后重新签名包。否则,您最终会得到一个带有无效签名的 MSI。

或者向您的 MSI 添加一个自定义操作,询问您的服务器它应该使用什么 URL。

更新

经过一番思考,我认为我应该在服务器上编译该包。只需以编程方式生成 Bundle.wxs,并将属性设置为相关的 url - 然后使用与往常相同的命令行编译它(如果您使用的是 Visual,应该在构建日志中可用工作室)。在您的 Chain 中,添加以下内容:

<MsiPackage Id="MySoftware" SourceFile="$(var.Setup.TargetPath)" Vital="yes">
<MsiProperty Name="MyUrl" Value="URL_WRITTEN_BY_SERVER" />
</MsiPackage>

关于 MsiPackage 元素的更多信息 here .

关于c# - 修改 wix 制作的 bundle 二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31631760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com