代码之家  ›  专栏  ›  技术社区  ›  Andrey Shchekin

将提供服务器URL嵌入到MSI中

  •  1
  • Andrey Shchekin  · 技术社区  · 15 年前

    我有一个ASP.NET服务器,它将客户机作为msi下载提供(类似于ccnet/cctray)。 可以有多个服务器(例如,对于dev/testing/production,但可能有不同的生产实例)。

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

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

    所以我认为服务器应该在服务之前修改MSI并添加正确的URL。是否可以不重建MSI?最简单的方法是什么?

    3 回复  |  直到 15 年前
        1
  •  2
  •   saschabeaumont    15 年前

    基本上,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

        2
  •  0
  •   Tamar    15 年前

    我不知道修改msi本身的方法,但是您可以让服务器将URL写入客户机上的一个已知文件,并在该文件中读取msi项目(然后将其删除)。这样,您就可以为所有服务器构建一个MSI。

        3
  •  0
  •   Pavel Chuchuva grapeot    15 年前

    在服务之前修改Web服务器上的msi文件不是一个好主意。如果有人在您仍在更新文件时请求该文件怎么办?

    最好修改构建过程以生成与生产网站对应的一组MSI文件。每个网站都有自己的自定义msi文件。