【问题标题】:Some Services stop automatically if they are not in use by other services如果某些服务没有被其他服务使用,它们会自动停止
【发布时间】:2011-09-15 09:50:12
【问题描述】:

尝试启动 Windows 服务时出现错误“如果某些服务没有被其他服务使用,它们会自动停止”。

我有一个不使用 windows 服务配置文件并使用静态属性的服务 - 它工作正常

现在,我使用 app.config 文件并重建我的设置项目 + 服务项目。现在我安装服务,然后尝试启动服务 - 我收到以下错误:

如果某些服务没有被其他服务使用,它们会自动停止

服务以本地系统登录。

欢迎任何意见!谢谢。

【问题讨论】:

    标签: c# windows service windows-services


    【解决方案1】:

    这通常是以下两种情况之一的结果 - (a) 您的 OnStart() 方法抛出异常或 (b) OnStart() 方法没有启动线程来完成工作。

    如果问题是 (a),那么显而易见的解决方案是调试服务以找出问题所在。至少,在OnStart() 方法的内容周围放置一个try-catch 块,并在发生异常时将错误记录到系统事件日志中。然后您可以在 Windows 事件查看器中查看详细信息。

    如果问题是 (b),那么您需要创建一个实际执行某些操作的线程。该线程需要是前台线程(而不是后台线程)以防止服务关闭。一个典型的OnStart() 方法如下所示:

    private System.Threading.Thread _thread;
    
    protected override void OnStart(string[] args)
    {
        try
        {
            // Uncomment this line to debug...
            //System.Diagnostics.Debugger.Break();
    
            // Create the thread object that will do the service's work.
            _thread = new System.Threading.Thread(DoWork);
    
            // Start the thread.
            _thread.Start();
    
            // Log an event to indicate successful start.
            EventLog.WriteEntry("Successful start.", EventLogEntryType.Information);
        }
        catch (Exception ex)
        {
            // Log the exception.
            EventLog.WriteEntry(ex.Message, EventLogEntryType.Error);
        }
    }
    
    private void DoWork()
    {
        // Do the service work here...
    }
    

    【讨论】:

    • 我也遇到了同样的错误,并从这个答案中得到了解决方案......谢谢。
    • 是的,我在 Windows 事件日志中发现服务错误。
    • 兄弟也更新答案。更正 EventLog 的拼写...。有用的答案,谢谢@MattDavis
    【解决方案2】:

    我收到此错误,这是因为硬盘驱动器已满。它可能是阻止服务运行的任何东西。

    【讨论】:

      【解决方案3】:

      我可以通过调整服务属性来解决这个问题。

      我注意到所有其他工作服务都使用“本地系统”作为“登录身份”,但有问题的服务正在使用“本地服务”。您可以通过转到服务列表来解决此问题,右键单击所需的服务,单击上下文菜单上的属性,然后将“登录为”更改为“本地系统帐户”,如果它与下图所示不同。

      【讨论】:

        【解决方案4】:

        由于在我的 serviceInstaller.msi 上运行 installUtil.cmd 时未创建 dll,我遇到了同样的错误。为了解决这个问题,我必须为我在项目中期望的每个 dll 包含其中一个 => <File Id="Interception" Source="$(var.SourceDir)\Microsoft.Practices.Unity.Interception.dll" /> 并将其放在我的 Service.wxs 文件中。像这样 => <Fragment><DirectoryRef Id="ApplicationDirectory"><Component Id="ServiceID" Guid="$(var.ServiceGuid)"> *here* <closing tags...>。并确保所有 dll 都包含在安装程序 x 复制命令中:)

        希望这会有所帮助!

        【讨论】:

          【解决方案5】:

          我在启动服务时遇到了同样的错误。当我去检查应用程序日志时,错误与telnet有关。这意味着telnet(23)的端口被另一个服务占用,那个时候需要去资源管理器并检查正在使用23端口的服务并禁用它服务,然后相应的服务就可以毫无问题地启动。

          【讨论】:

            【解决方案6】:

            本地计算机上的 Windows Search 服务启动然后停止。如果某些服务没有被其他服务或程序使用,它们会自动停止。

            检查this out

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-12-27
              • 2013-09-11
              • 1970-01-01
              • 1970-01-01
              • 2023-01-31
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多