背景:我有一个 .NET 应用程序,必须对其进行部署和自动配置才能在多个第三方环境中工作。目前,它通过将客户编译的 MSI 发布到 Intranet 来进行部署。MSI 需要客户编译的原因是指定部署参数,例如要连接的内部 Web 服务 URL。
问题陈述: MSI 和 ClickOnce 部署安装都必须签名;否则安全弹出显示。我有一个签名密钥,但无法对其进行签名,因为没有关于它将在哪个客户环境中使用的信息。客户有关于环境的信息,因此他可以作为 ClickOnce 或构建 MSI,但无法对其进行签名,因为他没有钥匙。
问题:是否可以从网页启动预构建的 MSI、可执行文件或 ClickOnce 应用程序,同时为它们提供参数,例如 URL?或者,是否可以生成部署包,以便它可以确定它是从哪个 URL 下载的(以便它用于发现环境)?
示例解决方案:解决问题的一种方法是重命名文件本身。例如:将 mysetup.msi 重命名为 aHR0cDovL215aG9zdC5sb2NhbC9jb25maWcueG1s.msi。这不会破坏数字签名,因为文件本身没有被更改。但是自定义操作可以访问 MSI 的名称,因此操作会将文件名转换为文本并了解它应该从http://myhost.local/config.xml读取配置。这会工作,但很丑陋。我正在寻找更优雅的解决方案。