0

所以,这就是这里的情况。

我有 2 个 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 等。)

有什么建议么 ?

4

2 回答 2

1

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

于 2010-09-09T07:06:15.177 回答
1

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

3个选项:

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

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

于 2010-09-08T20:07:56.617 回答