有没有办法从产品中检测设置版本?

时间:2010-09-08 19:20:46

标签: c# .net setup-deployment merge-module

所以,这是这里的情况。

我有两个asp.net网站+一些安装有设置的winform应用程序。它们都表示为安装项目中的合并模块。

目前,当我们想要更新应用程序的全局版本时,我们必须将所有版本更新为asp.net网站和内容。我知道可以将这个版本检测到asp.net应用程序的程序集信息中,这很容易。这里的困难是检测“全局”设置版本。 (比如这里的网站是版本1.5,但全局设置本身是版本3.4)。

在某些时候我想如果我找到setup.exe / setup.msi文件,我可以用反射浏览它,但它不是最好的解决方案。我们将每个版本的每个版本存储在服务器上的一个单独的文件夹中(例如c:\ Setups \ Product 1.0 \ Setup.exe,c:\ Setup \ Product 1.5 \ Setup.exe等)。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

定义“全局”设置版本。您是说每个补丁更新一些但不是所有程序集,因此任何一个程序集的版本,甚至任何程序集的版本都可能不会反映最后安装的补丁?

3个选项:

  • 在每个配置文件中保留全局版本信息,并每次推出每个已安装组件的每个配置的更新(不推荐)。
  • 提供共享配置文件,或从其他配置引用到“主”配置,可以从任何可执行项目中引用,并确保每次都更新配置。
  • 维护包含软件包全局版本的注册表项。

在这三个中,我会选择最后一个,因为安装和修补分布在系统的几个区域,但每个区域应该能够读取软件注册表项(如果不更新它)。这个过程并不困难;您可以引用静态System.Win32.Registry对象来获取LocalMachine,CurrentUser等的基本键,然后您可以通过浏览RegistryKey对象(或使用键路径从头创建一个)来遍历树。您可以在各种web和app.config文件中使用AppSetting指定密钥路径;这不应该像密钥本身的值那样频繁地改变。

答案 1 :(得分:1)

如果您要从一个MSI安装多个软件包,那么最好让MSI在ARP中列出,然后这个“全局设置”的版本将随时可供未来的MSI使用。在不知道您使用哪种技术来创建设置的情况下,很难提供更可靠的建议,但在WiX(Windows安装程序XML)中,您只需要包含一个升级元素,它将自动为您解决此问题。大多数技术都应该有一些方法可以检查当前的安装版本。