问题描述
当我使用api创建新设备时
var device = await HidDevice.FromIdAsync(deviceid,FileAccessMode.ReadWrite);
在该隐藏设备被处置之前,没有其他应用程序可以连接到该隐藏设备。
传递FileAccessMode.Read
并没有帮助(除了在尝试写入设备时引发异常)。
可以使用以下代码轻松测试:
var device = await HidDevice.FromIdAsync(deviceid,FileAccessMode.ReadWrite);
var device2 = await HidDevice.FromIdAsync(deviceid,FileAccessMode.ReadWrite);
设备2将为空,因为它已被系统锁定。
是否可以在多个应用之间共享HidDevice
?
解决方法
看来您是对的,HidDevice
API在您的情况下执行独占访问。
根据{{3}} Windows.Devices.HumanInterfaceDevice
,打开设备句柄作为共享读取或专有写入。
有this page带有 DeviceSharingMode 参数。但是我想它不能转换为HidDevice
。
将 imports: [
// ConfigModule.forRoot({ isGlobal: true }),or you can import it inside
TypeOrmModule.forRootAsync({
inject: [ConfigService],imports: [ConfigModule],useFactory: async (configService: ConfigService) => ({
type: 'mysql',host: this.configService.get<string>('DATABASE_HOST'),...
}),}),],
与 HidDevice.FromIdAsync(String,FileAccessMode)
一起使用。
文档指出,该设备将是只读的,但设备仍然可以写入,并且可以与其他应用共享。