我正在制作一个可以自动更新的 Windows 服务。计划是在有可用服务的新版本时运行控制台应用程序。此应用程序将通过引用 MSI 卸载并使用新版本重新安装服务。所以,我想要应用程序文件夹中的 MSI 副本。
MSI 可以在安装时将其自身的副本放在应用程序文件夹中吗?如果是这样,怎么做?
提前致谢!
我正在制作一个可以自动更新的 Windows 服务。计划是在有可用服务的新版本时运行控制台应用程序。此应用程序将通过引用 MSI 卸载并使用新版本重新安装服务。所以,我想要应用程序文件夹中的 MSI 副本。
MSI 可以在安装时将其自身的副本放在应用程序文件夹中吗?如果是这样,怎么做?
提前致谢!
这种方法最初是错误的。
如果有新版本可用,则有很多机会升级某些东西。
+1还有一些方法可以在不停止服务的情况下做到这一点。在 C# 中,您可以动态加载和卸载版本化程序集,但这会使您的开发人员生活变得非常艰难。
如果您选择了 2.nd 选项,那么您可以从代码启动“异步处理”,这样安装程序将使用默认选项(搜索静默安装)运行,尽管您可以定义自定义设置“my.msi -s config.file”。如果已经存在,安装程序需要准备检查和停止服务本身。
这是一个复杂的故事,搜索我提到的一些关键字。
我建议不要让 .msi 复制自身(这需要一些真正的技巧才能使自引用工作),我建议只让新的 .msi 升级旧的 .msi 文件。那么您只需要新的 .msi 而不需要旧的 .msi。
或者,您可以将内容放入Bundle
(使用 WiX 工具集中的 Burn 引擎),它可以通过Bundle
.