Windows 服务安装时出现 InvalidOperationException

InvalidOperationException on Windows Service installation

我有一个几个月前开发的 windows 服务应用程序,到目前为止 运行 在遥远的 Windows Server 2012 上完美无缺。但是在一次小的更新之后,我有在服务器上重新安装它,现在,每次我尝试在此服务器上 运行 InstallUtil 时,我都会收到错误消息。这是完整的命令行对话框:

Installing assembly 'c:\Program Files\My Company\MyServiceApp\MyServiceApp.exe'. Affected parameters are:

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

正在安装服务 SendHistoryService...
已成功安装服务 SendHistoryService。
在日志应用程序中创建事件日志源 SendHistoryService...
System.ServiceProcess.ServiceInstaller.
的 OnAfterInstall 事件处理程序发生异常 System.InvalidOperationException: 无法在计算机“.”上启动服务 SendHistoryService。
引发内部异常 System.ComponentModel.Win32Exception,并显示以下错误消息:服务未及时响应启动或控制请求。
回滚组件 '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 class 中评论启动服务的行。现在安装 运行s 正常,但是当我尝试启动服务时,它失败了,我收到以下错误消息:

Windows could not start the SendHistoryService service on Local Computer.

Error 1053: The service did not respond to the start or control request in a timely fashion.

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