1

我正在开发一个 Windows 服务,它在使用以下代码运行时使用 InTheHand.Net.Bluetooth 库开始监听蓝牙连接:

            btListener = new BluetoothListener(service);
            btListener.Start();

如果在 Windows 完成启动后手动启动该服务(例如在 Windows 启动大约 5 分钟后),那么一切正常:蓝牙服务启动成功。

但是,如果我将 Windows 服务的启动类型设置为自动,则该部分代码会导致以下异常:

System.Net.Sockets.SocketException (0x80004005): An invalid argument was supplied
   at InTheHand.Net.Bluetooth.Msft.SocketBluetoothClient.ThrowSocketExceptionForHR(Int32 errorCode)
   at InTheHand.Net.Bluetooth.Msft.MicrosoftSdpService.SetService(Byte[] sdpRecord, ServiceClass cod)
   at InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.SetService(Byte[] sdpRecord, ServiceClass cod)
   at InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.Start(Int32 backlog)
   at InTheHand.Net.Bluetooth.Msft.WindowsBluetoothListener.Start()

我认为这是因为蓝牙设备尚未初始化时调用“开始”方法太快了。有没有人也遇到过类似的问题?关于如何知道何时应该调用“开始”方法以确保它可以成功启动的任何想法?

感谢任何反馈或评论。

谢谢,

国语

4

1 回答 1

1

通常,您可以通过将服务配置为依赖于它在启动之前需要运行的任何服务(或服务)来解决此类问题。然后 SCM 将确保在其他服务启动之前它不会启动您的服务。

这篇知识库文章有点旧,但它解释了基础知识。

于 2012-07-11T03:52:59.497 回答