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

时间:2012-11-28 15:06:10

标签: windows-services uninstall installutil

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

我得到的输出是:

  

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

     

logtoconsole = logfile = C:\ FMS \ GSIS.FileMoverService.InstallLog

     

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

     

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

     

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

     

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

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

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

有什么想法吗?

2 个答案:

答案 0 :(得分:13)

最后,我使用sc delete GSIS.FileMoverService删除了该服务。这很有用。

答案 1 :(得分:3)

所以我希望这与扩展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相匹配。如果没有,那么您将获得此异常,因为它在尝试卸载之前找不到安装的服务。