我有一台ASP.NET服务器,它将客户端作为MSI下载提供(类似于CCNet / CCTray)。 可以有多个服务器(例如,用于开发/测试/生产,但可能有不同的生产实例)。
因此客户必须知道服务器URL。我不能要求用户提供URL,因为它对他们没有多大意义,他们无论如何都不知道任何其他服务器。所以MSI应该包含服务器URL。
现在,我可以为不同的环境预先构建不同版本的MSI(因为这些开发/测试已经有不同的构建步骤),但这并不能解决产品已经构建的几个产品的问题。
所以我认为服务器应该修改MSI并在提供之前添加正确的URL。没有重建msi有可能吗?实现这一目标的最简单方法是什么?
答案 0 :(得分:2)
基本上MSI文件只是一个数据库,使用Windows Installer API可以在此数据库上运行任意SQL ...例如:
Dim installer, database, view, result
Set installer = CreateObject("WindowsInstaller.Installer")
Set database = installer.OpenDatabase ("setup.msi", 1)
Set view = database.OpenView ("INSERT INTO Property (Property, Value) VALUES ('URLPROPERTY', 'http://some.server/blah/service')")
view.Execute
database.Commit
Set database = nothing
只需在构建后或预先下载过程中使用此脚本,您就会被排序:)
有关更多信息和其他(更好)示例脚本,请参阅Windows SDK
答案 1 :(得分:0)
我不知道修改MSI本身的方法,但您可以让服务器将url写入客户端上的已知文件,并在该文件中读取MSI项目(并将其删除)。这样,您就可以为所有服务器构建一个MSI。
答案 2 :(得分:0)
在提供服务之前修改Web服务器上的MSI文件不是一个好主意。如果有人在您还在更新文件时请求该文件该怎么办?
最好修改构建过程以生成一组与生产网站相对应的MSI文件。每个网站都有自己的自定义MSI文件。