我正在开发一个windows服务,当使用以下代码运行时,该服务将开始使用InTheHand.Net蓝牙库列出蓝牙连接:
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()
我认为这是因为当蓝牙设备尚未初始化时,"Start"方法调用得太早。有没有人也遇到过类似的问题?关于如何知道何时应该调用"Start"方法以确保它能够成功启动,有什么想法吗?
感谢任何反馈或意见。
谢谢,
Quoc
通常,您可以通过将服务配置为依赖于启动前需要运行的服务来解决这类问题。然后SCM将确保在其他服务启动之前不会启动您的服务。
这篇知识库文章有点陈旧,但它解释了基本原理。