Windows服务安装上的InvalidOperationException

时间:2015-12-09 10:38:26

标签: c# windows-services .net-4.5 windows-server-2012 installutil

我有几个月前开发的Windows服务应用程序,到目前为止在远程Windows Server 2012上运行得很完美。但是经过一次小的更新,我不得不在服务器上重新安装它,现在,每次我尝试在这台服务器上运行InstallUtil,我收到一个错误。这是完整的命令行对话框:

  

安装程序集&c; \ Program Files \ My Company \ MyServiceApp \ MyServiceApp.exe'。   受影响的参数是:

     
    

logtoconsole =
    assemblypath = c:\ Program Files \ My Company \ MyServiceApp \ MyServiceApp.exe
    logfile = c:\ Program Files \ My Company \ MyServiceApp \ MyServiceApp.InstallLog

  
     

安装服务SendHistoryService ...
  服务SendHistoryService已成功安装   在日志应用程序中创建EventLog源SendHistoryService ...
  System.ServiceProcess.ServiceInstaller的OnAfterInstall事件处理程序中发生异常   System.InvalidOperationException:无法在计算机上启动服务SendHistoryService'。'。
  抛出了内部异常System.ComponentModel.Win32Exception,并显示以下错误消息:服务未及时响应启动或控制请求。
  回滚汇编&c; \ C:\ Program Files \ My Company \ MyServiceApp \ MyServiceApp.exe'。
  受影响的参数是:

     
    

logtoconsole =
    assemblypath = c:\ Program Files \ My Company \ MyServiceApp \ MyServiceApp.exe
    logfile = c:\ Program Files \ My Company \ MyServiceApp \ MyServiceApp.InstallLog

  
     

将事件日志恢复到源SendHistoryService的先前状态   服务SendHistoryService正在从系统中删除...
  服务SendHistoryService已成功从系统中删除。

请注意,服务安装程序仍可在本地计算机上完美运行(W8.1)。安装程序实际上包含两个单独的服务,称为" SendHistoryService"和" GeneratorService"但是,正如您所看到的,安装程序在尝试安装第一个时失败了。如果它具有任何相关性,则该过程在以下行中停留约30秒:

Creating EventLog source SendHistoryService in log Application...

当然,我检查的第一件事是OnAfterInstall事件处理程序,但似乎没有任何错误:

[RunInstaller(true)]
public partial class ProjectInstaller : Installer
{
    public ProjectInstaller() { InitializeComponent(); }

    private void ServiceProcessInstaller_AfterInstall(object sender, InstallEventArgs e) { }

    private void GeneratorServiceInstaller_AfterInstall(object sender, InstallEventArgs e)
    {
        using (var sc = new ServiceController(GeneratorServiceInstaller.ServiceName))
            sc.Start();
    }

    private void SendHistoryServiceInstaller_AfterInstall(object sender, InstallEventArgs e)
    {
        using (var sc = new ServiceController(SendHistoryServiceInstaller.ServiceName))
            sc.Start();
    }
}

我真的无法理解这里发生的事情。任何线索?

编辑:我尝试评论在ProjectInstaller类中启动服务的行。现在安装正常运行,但是当我尝试启动服务时,它失败了,我收到以下错误消息:

  

Windows无法在本地计算机上启动SendHistoryService服务。

     

错误1053:服务未及时响应启动或控制请求。

1 个答案:

答案 0 :(得分:1)

最后,我的问题是由连接字符串问题引起的,我花了一些时间来查找,因为错误消息尽可能不明确。令人惊讶的是,服务达到超时而不是抛出异常。根据我在在线搜索中看到的内容,此错误消息可能有许多不同的原因。