尝试启动 Windows 服务时出现错误“某些服务如果未被其他服务使用,则会自动停止”。
我有一个不使用 Windows 服务配置文件并使用静态属性的服务 - 它工作正常
现在,我利用 app.config 文件并重建我的安装项目 + 服务项目。现在我安装该服务,然后尝试启动该服务 - 我收到以下错误:
某些服务如果未被其他服务使用,则会自动停止
服务作为本地系统登录。
欢迎任何意见!谢谢。
这通常是以下两种情况之一的结果 - (a) 您的
OnStart()
方法引发异常,或者 (b) OnStart()
方法没有启动线程来执行工作。
如果问题是 (a),那么显而易见的解决方案是调试服务以找出问题所在。 至少,在
try-catch
方法的内容周围放置一个 OnStart()
块,并在发生异常时将错误记录到系统事件日志中。 然后您可以在 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...
}
我收到此错误,这是因为硬盘驱动器已满。它可能是任何阻止服务运行的因素。
我遇到了同样的错误,这是由于在 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 复制命令中:)
希望这有帮助!
我在启动服务时遇到了同样的错误。当我检查应用程序日志时,错误与 telnet 相关。这意味着 telnet(23) 的端口已被另一个服务占用,此时需要转到资源管理器并检查正在使用 23 端口的服务并禁用该服务服务,然后相应的服务就可以毫无问题地启动。
本地计算机上的 Windows Search 服务启动然后停止。如果其他服务或程序未使用某些服务,则会自动停止。
检查这个。
面对同样的问题,我在绑定中使用我的IP,并在更新后开始出现此异常。使用我的主机名而不是 IP 更新它以避免将来出现这种情况
我重新启动了托管该服务的服务器并且它工作了。