【发布时间】:2018-01-03 00:22:38
【问题描述】:
我正在使用 MSI 安装程序在 Windows 7 和 Windows Server 中将我的服务从一个版本升级到另一个版本。 Windows 7 机器中的升级工作正常,但在 Windows Server 2012 中失败。 这就是我正在做的 -
- 我正在使用 C# 代码停止旧版本服务。
NativeWinServiceMethod.ControlService(service, NativeWinServiceMethod.SERVICE_CONTROL.STOP, ref lpServiceStatus);
然后使用 MSI 安装程序 exe 从安装路径中删除所有文件。
终于又安装了新版本。
此升级在 Windows 7 中运行良好,但在 Windows Server 中失败。 MSI 日志显示 1603
我现在知道它的原因,但需要一个解决方案 - 原因 -
MSI 安装程序正在卸载以前的版本并开始 安装新版本,但之前的版本可能是 从注册表中删除。由于从注册表中删除服务是 花费时间 - 新版本服务安装失败。
【问题讨论】:
-
手动停止服务是一种不好的做法。您需要在
ServiceControl表中的 MSI 中注册您的服务,安装程序会为您完成。 -
1603 几乎可以肯定是代码崩溃的结果。您的 MSI 工具中的 ServiceControl 是要使用的东西,您还没有说明服务实际上是什么,但有时服务名称会更改,而您的代码将找不到它。
-
感谢您的回复-但是如果出现代码崩溃,它应该在所有环境中都失败,但安装只是在服务器机器上失败。这里的Service是自定义windows服务。
-
我有更多关于这个问题的信息 - 编辑了我的帖子
-
您不应该运行任何代码来安装或升级服务。您所需要的一切都在 MSI 中开箱即用,使用它将使您的设置非常可靠。您使用什么来生成 MSI?维克斯?安装屏蔽?
标签: c# windows-installer