我面临一个奇怪的问题,我找不到可行的解决方案。预先感谢您的帮助。
我用C#开发了Windows服务,该服务使用Newtonsoft.JSON库来解析一堆WebAPI的结果。该服务已与MSI一起部署,并且一切运行正常。
该服务的第一个版本使用的是Newtonsoft.JSON 6.0.8,但是最近我移到了11.0.2版。
我打包了一个新的MSI(具有正确的版本/产品ID /升级ID以确保升级),并且我正尝试通过执行以下操作的小型安装应用程序来部署新版本:
System.ServiceProcess.ServiceController
System.Process
来在新的msi文件上调用msiexec 结果:该服务无法正常工作,从日志中,我可以看到该应用程序仍在寻找Newtonsoft.JSON的6.0.8版本。
如果我尝试以下操作:
一切正常,服务使用该库的11.0.2版...
我为此感到疯狂...如何修复/清理升级过程?
预先感谢
答案 0 :(得分:1)
摘要 :修改并扩展您的MSI以处理所有与服务相关的任务:
service installation
,service deletion
,service control
。使用内置的MSI构造即可。
服务安装 :不确定我是否遵循了整个问题方案的描述,但要解决的问题是您应该让MSI自己在安装过程中控制服务安装和服务控制安装和升级过程。服务通过ServiceInstall和ServiceControl表在MSI文件中安装和控制,这些表直接映射到WiX XML元素,如下所示:
<Component>
<File Source="$(var.SourceDir)\WindowsService.exe" />
<ServiceInstall Name="MyService" ErrorControl="normal" Start="auto" Type="ownProcess" />
<ServiceControl Id="MyService" Name="MyService" Start="install" Stop="both" Remove="uninstall" Wait="yes" />
</Component>
Let me link to a similar sample on github(通过Rainer Stropek),如果以上内容不清楚的话。它更加完整和详尽。
链接 :此答案讨论了相同的问题:Service Installation & Control。认为使用custom actions或自定义可执行文件来处理服务控制以及安装或卸载是a deployment anti-pattern-既不必要,不理想也不可靠。一旦正确使用,MSI便具有功能齐全且可靠的功能(除非您拥有非常特殊且与众不同的服务,并且“出于某种原因”需要自定义操作)。