【问题标题】:Windows Service initialized before network connection with SSD在与 SSD 进行网络连接之前初始化 Windows 服务
【发布时间】:2013-12-12 12:39:20
【问题描述】:

我目前正在开发一个 Windows 服务,它检查网络连接并在机器不在线时执行一些操作。

但是,对于新的 SSD 驱动器,Windows 服务的加载速度非常快,以至于它们在任何网络驱动器之前被初始化,这将始终导致脱机消息。

Microsoft 本身已经通过新的 Windows 服务类型“自动(延迟启动)”解决了这个问题,它只需等待 2 分钟并启动服务。这实际上是一个糟糕的解决方案,因为两分钟太长了。

我现在正在尝试在 Windows 批处理脚本(由服务执行)中实现 30 秒的等待时间。但是,出于某些充分的理由,我不想使用第三方软件。

在 Windows 7 中,您可以使用timeout,但一个要求是能够将该服务安装到还没有此命令的 XP 上。

另一种可能性是ping trick,这也是一个肮脏的解决方案。

是否有另一种好的解决方案可以在尝试连接网络驱动器后直接获得通知,或者至少可以在 XP 而不是第三方上使用更好的睡眠/等待可能性?

提前感谢您的回答!

【问题讨论】:

  • 你为什么认为ping很脏?它适用于所有 Windows 版本。 cmd Batch 没有其他内置的 wait 命令,可能是 Powershell 或 VBS/wsh。为什么不使用循环并每隔 10 秒左右检查一次网络。
  • 您正在使用批处理脚本;你已经脏了。使用 ping 不会让事情变得更糟!

标签: windows batch-file windows-services sleep wait


【解决方案1】:

IcmpSendEcho function 是要查看的函数。该函数发送 ICMP 回显请求并允许指定超时。回显请求可能会在初始化期间在 等待网络 循环中从 Windows 服务内部发送到 localhost (127.0.0.1),以查明网络是否已启动。

【讨论】:

  • 您的批处理文件是由您的服务启动的,对吧?那么为什么不在服务中而不是在批处理文件中进行网络状态检查/等待呢?
  • @HarryJohnston:我的服务?会不会是 Florian 使用术语“Windows 服务”来进行某些批处理而不是 Windows Service
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2023-03-24
相关资源
最近更新 更多