13

可能重复:
如何在 C# 中以编程方式安装 Windows 服务?

有没有办法使用 C# 以编程方式删除服务而无需执行“InstallUtil.exe /u MyService.exe”?

4

4 回答 4

23

您可以使用 System.ServiceProcess.dll 中的ServiceInstaller.Uninstall 方法。例如:

ServiceInstaller ServiceInstallerObj = new ServiceInstaller(); 
InstallContext Context = new InstallContext("<<log file path>>", null); 
ServiceInstallerObj.Context = Context; 
ServiceInstallerObj.ServiceName = "MyService"; 
ServiceInstallerObj.Uninstall(null); 

此方法将尝试在卸载之前先停止服务。

于 2012-08-30T16:30:47.387 回答
1

如果您要卸载的服务是您自己编写的,并且您已将安装程序添加到项目中,您可以简单地实例化您的 Installer 类并调用 Uninstall。例如,如果您将安装程序拖到设计器服务上并将该组件命名为“ProjectInstaller”,则可以使用以下代码让您的服务自行卸载:

var installer = new ProjectInstaller();
installer.Uninstall(null);
于 2012-08-30T16:42:01.103 回答
1

服务在 HKLM\SYSTEM\CurrentControlSet\services 下的 Windows 注册表中列出。如果您删除与服务的给定名称相对应的键(不是显示名称;它注册时使用的名称),您将有效地“取消注册”该服务。您可以使用Microsoft.Win32.Registry对象以编程方式执行此操作。您需要在执行计算机上具有 CAS 权限才能修改注册表项。

于 2012-08-30T16:31:28.357 回答
1
System.Configuration.Install.ManagedInstallerClass
                            .InstallHelper(new string[] { "/u", executablePath });
于 2012-08-30T16:30:16.060 回答