嵌入提供服务器URL到MSI

时间:2009-12-14 22:16:10

标签: asp.net windows-installer

我有一台ASP.NET服务器,它将客户端作为MSI下载提供(类似于CCNet / CCTray)。 可以有多个服务器(例如,用于开发/测试/生产,但可能有不同的生产实例)。

因此客户必须知道服务器URL。我不能要求用户提供URL,因为它对他们没有多大意义,他们无论如何都不知道任何其他服务器。所以MSI应该包含服务器URL。

现在,我可以为不同的环境预先构建不同版本的MSI(因为这些开发/测试已经有不同的构建步骤),但这并不能解决产品已经构建的几个产品的问题。

所以我认为服务器应该修改MSI并在提供之前添加正确的URL。没有重建msi有可能吗?实现这一目标的最简单方法是什么?

3 个答案:

答案 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文件。