Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows Wix更新-如何重新启动我的服务,但没有其他应用程序正在使用我的dll?_Windows_Wix_Windows Installer - Fatal编程技术网

Windows Wix更新-如何重新启动我的服务,但没有其他应用程序正在使用我的dll?

Windows Wix更新-如何重新启动我的服务,但没有其他应用程序正在使用我的dll?,windows,wix,windows-installer,Windows,Wix,Windows Installer,我已经创建了一个安装程序,并不时发布更新。仅供参考,我的程序有两部分:服务应用程序和dll。其他一些客户端应用程序使用我的dll,我的服务应用程序不断运行 由于某些客户端应用程序使用我的dll,如果我运行更新,请重新启动管理器重新启动这些客户端应用程序,但我希望确保它们不会重新启动,因此我通过在我的wix脚本中将MSIRestManagerControl设置为“禁用”,禁用了重新启动管理器。 因此,这可以防止其他客户端应用程序重新启动,这很好。但它的副作用是,在更新过程之后,我的服务应用程序也不

我已经创建了一个安装程序,并不时发布更新。仅供参考,我的程序有两部分:服务应用程序和dll。其他一些客户端应用程序使用我的dll,我的服务应用程序不断运行

由于某些客户端应用程序使用我的dll,如果我运行更新,请重新启动管理器重新启动这些客户端应用程序,但我希望确保它们不会重新启动,因此我通过在我的wix脚本中将MSIRestManagerControl设置为“禁用”,禁用了重新启动管理器。 因此,这可以防止其他客户端应用程序重新启动,这很好。但它的副作用是,在更新过程之后,我的服务应用程序也不会重新启动

所以基本上我的问题是,我想找到一种方法来阻止其他客户端应用重新启动,但我想确保我的服务在更新后重新启动。
你推荐什么?任何建议都将不胜感激。

您需要对安装版本发出的MSI包进行后处理。您需要将条目添加到ServiceControl表中,以便Windows Installer在安装组件时停止服务,然后在安装新DLL后再次启动服务。您还需要确保在InstallExecuteSequence表中安排StopServices和StartService操作


您需要使用wirunsql.vbs工具来运行相关的INSERT查询,以添加必要的记录。

我找到了一种实现所需的方法,但不确定这是否是最好的方法。基本上,我创建了一个自定义操作,该操作将在“InstallInitialize”操作之后调用。在这个自定义操作中,我启动自己的服务。这似乎是工作,但如果有人有更好的解决方案,请张贴!谢谢。这样你就可以创建一个DLL地狱。客户端应用程序仍然使用旧版本的DLL运行,服务应用程序使用新版本的DLL运行。那太糟糕了。这可能导致难以捕捉到行为怪异的bug。如果RestartManager可以处理重新启动服务和客户端的问题,那么我建议您继续。我认为您应该在InstallInitialize操作之后立即停止服务应用程序,并在InstallFinalize操作之前再次启动它。如果在InstallInitialize之后启动服务,则服务仍然使用旧的DLL版本,因为它尚未更新。