首页 > 解决方案 > 如何让 MSI 安装程序在卸载服务时运行一些代码

问题描述

我遇到了一些我想在卸载服务时执行的问题。我已将代码添加到 System.ServiceProcess.ServiceProcessInstaller BeforeUninstall 事件和
覆盖方法 OnBeforeUninstall,但这也不起作用。

使用我的 InstallShield msi 卸载服务时,不会执行此代码。

如何在卸载期间强制服务启动一些代码?我需要在我的 C# 服务中使用不同的事件吗?我需要更改我的 MSI 中的某些内容吗?

注意:我的问题与以下 https://community.flexerasoftware.com/showthread.php?149176-MSI-Uninstall-NET-Service-does-not-launch-BeforeUninstall-event相同

谢谢,萨加尔

标签: windowsservicewindows-installerinstallshield

解决方案


你需要更明确地说明你所做的一切。例如,安装程序类方法不会自动调用,除非它们作为自定义操作显式添加到您的设置中(在您的情况下是卸载自定义操作)。您还应该准确解释服务是如何安装的。

请注意,安装程序类是由 Visual Studio 设置发明的,通常不需要使用它们,因为像 InstallShield 这样的工具通常支持 Windows Installer 中的标准 ServiceInstall 和 ServiceControl 功能。安装程序类是不必要的。此外,这些事件是 Visual Studio 的特殊事件,我不清楚 InstallShield 是否支持它们。如果您使用 Uninstall 方法来卸载服务,那么只需将您的“之前”代码添加到 Base.Uninstall() 调用之前。

如果您希望在卸载服务时运行代码,更常用的方法是使用自定义操作来调用您的代码,并根据您的确切要求将调用设置为 REMOVE="ALL" (用于卸载)或其他条件. 例如,如果您升级 MSI 以升级现有产品,您是否仍要运行该卸载代码?


推荐阅读