Installutil 不会卸载:“指定的服务不作为已安装的服务存在”

Posted

技术标签:

【中文标题】Installutil 不会卸载:“指定的服务不作为已安装的服务存在”【英文标题】:Installutil won't uninstall: "The specified service does not exist as an installed service" 【发布时间】:2012-11-16 11:40:09 【问题描述】:

我一直在尝试使用 installutil 安装 Windows 服务:installutil /u GSIS.FileMoverService.exe

我得到的输出是:

正在卸载程序集“C:\FMS\GSIS.FileMoverService.exe”。受影响的参数有:

logtoconsole = 日志文件 = C:\FMS\GSIS.FileMoverService.InstallLog

assemblypath = C:\FMS\GSIS.FileMoverService.exe 正在删除 EventLog 源文件移动器服务。

警告:源文件移动器服务未在本地计算机上注册。 Service File Mover Service 正在从系统中删除...

卸载 System.ServiceProcess.ServiceInstaller 安装程序时发生异常。 System.ComponentModel.Win32Exception:指定的服务不作为已安装的服务存在卸载时发生异常。

此异常将被忽略,卸载将继续。但是,卸载完成后,应用程序可能无法完全卸载。

当我尝试卸载时服务已停止。它肯定已注册为服务。我已经重新启动,它仍然在服务小程序 (services.msc) 中可见。它还可以从“服务”小程序成功启动和停止,因此看起来它没有安装不成功(或仅部分安装)。

我从 VS2010 命令提示符调用 installutil(已单击以管理员身份运行)。

有什么想法吗?

【问题讨论】:

【参考方案1】:

最后我使用sc delete GSIS.FileMoverService 删除了该服务。这行得通。

【讨论】:

它有什么作用?【参考方案2】:

所以我希望这与您扩展 System.Configuration.Install.Installer 的类有关。在您的类的构造函数中,您应该将 System.ServiceProcess.ServiceProcessInstaller 和 System.ServiceProcess.ServiceInstaller 添加到安装程序,例如:

public MyServiceInstaller(string displayName = null, string description = null, ServiceAccount account = ServiceAccount.LocalSystem, string username = "", string password = "", ServiceStartMode startType = ServiceStartMode.Automatic, bool delayedAutoStart = false, string[] servicesDependedOn = null)

    Installers.Add(new ServiceProcessInstaller
        
            Account = ServiceAccount.LocalSystem,
            Username = username,
            Password = password
        );
Installers.Add(new ServiceInstaller
    
        ServiceName = GetType().Name,
        StartType = startType,
        DisplayName = displayName ?? serviceName,
        Description = description ?? string.Empty,
        ServicesDependedOn = servicesDependedOn,
        DelayedAutoStart = delayedAutoStart
    );


ServiceInstaller 中的 ServiceName 需要与安装服务时分配给 ServiceInstaller 的 ServiceName 匹配。如果没有,那么您将收到此异常,因为它在尝试卸载之前找不到已安装的服务。

【讨论】:

以上是关于Installutil 不会卸载:“指定的服务不作为已安装的服务存在”的主要内容,如果未能解决你的问题,请参考以下文章

如何强制卸载windows服务

安装服务时,installutil卡住了

安装&卸载Windows服务

安装windows系统的installutil

Windows服务的安装和卸载

Windows服务的安装卸载