1

我正在制作一个可以自动更新的 Windows 服务。计划是在有可用服务的新版本时运行控制台应用程序。此应用程序将通过引用 MSI 卸载并使用新版本重新安装服务。所以,我想要应用程序文件夹中的 MSI 副本。

MSI 可以在安装时将其自身的副本放在应用程序文件夹中吗?如果是这样,怎么做?

提前致谢!

4

2 回答 2

0

这种方法最初是错误的。

如果有新版本可用,则有很多机会升级某些东西。

  1. 在安装时检查它们(某些安装程序具有自动下载功能) - 部分解决方案,没有自动升级机会
  2. 服务需要发现新版本(后台线程) - 需要一些开发 [msi silent install in the background] <- 首选
  3. 集中部署 - 有集中安装的解决方案,甚至 MS、IBM 等都有这方面的工具。因此,如果一个新的解决方案已经准备好,那么无论如何您都可以在您的域中部署它们。<- 不太划算,大公司经常使用

+1还有一些方法可以在不停止服务的情况下做到这一点。在 C# 中,您可以动态加载和卸载版本化程序集,但这会使您的开发人员生活变得非常艰难。

如果您选择了 2.nd 选项,那么您可以从代码启动“异步处理”,这样安装程序将使用默认选项(搜索静默安装)运行,尽管您可以定义自定义设置“my.msi -s config.file”。如果已经存在,安装程序需要准备检查和停止服务本身。

这是一个复杂的故事,搜索我提到的一些关键字。

于 2013-03-20T16:25:14.227 回答
0

我建议不要让 .msi 复制自身(这需要一些真正的技巧才能使自引用工作),我建议只让新的 .msi 升级旧的 .msi 文件。那么您只需要新的 .msi 而不需要旧的 .msi。

或者,您可以将内容放入Bundle(使用 WiX 工具集中的 Burn 引擎),它可以通过Bundle.

于 2013-03-20T17:23:31.783 回答