c# - Windows 10 上的虚拟 USB 到 COM 适配器?
问题描述
我有一个 C# 应用程序/Windows 服务(和源代码),它试图通过串行连接外部 USB 设备,我想用我制作的虚拟设备(另一个 C# 服务/应用程序)替换物理 USB 设备。这通常很简单,因为在使用com0com将我的程序的 COM 端口与另一个程序的 COM 端口连接之前,我已经多次这样做了。
我的问题是该服务使用 WMI(Windows Management Instrumentation)来检查是否插入了具有特定 VID 和 PID 的 USB 设备(在“PNPDeviceID”/“DeviceID”中)......
this.USBInsertWatcher = new ManagementEventWatcher();
WqlEventQuery wqlEventQuery1 = new WqlEventQuery("SELECT * FROM __InstanceCreationEvent WITHIN 2 WHERE TargetInstance ISA 'Win32_USBHub'");
this.USBInsertWatcher.EventArrived += new EventArrivedEventHandler(this.OnUSBDeviceInserted);
this.USBInsertWatcher.Query = (EventQuery) wqlEventQuery1;
this.USBInsertWatcher.Start();
...以及要连接的相关 COM 端口(“DeviceID”)。
private string GetComPort()
{
using (ManagementObjectCollection instances = new ManagementClass("Win32_SerialPort").GetInstances())
{
foreach (ManagementBaseObject managementBaseObject in instances)
{
string str = managementBaseObject["PNPDeviceID"].ToString();
if (str.Contains(this.vendorIdStr) && str.Contains(this.productIdStr))
return managementBaseObject["DeviceID"].ToString();
}
return (string) null;
}
}
这意味着我
- 无法选择服务连接的 COM 端口和
- 首先无法让服务连接到任何东西:/
我相信我需要的是某种模拟 COM 到 USB 适配器的驱动程序。我已经有一个虚拟 com 端口(由我的其他 C# 程序打开)
我对任何类型的解决方案持开放态度,但我应该可以在非虚拟化 Windows 机器上使用,而且由于(许可证/构建)问题我无法重新编译二进制文件,并且解决方案应该是免费的。
谢谢!
解决方案
推荐阅读
- push-notification - 当应用程序被杀死时,推送通知不显示消息正文。它只显示应用程序的默认图标
- android - 带有 configChanges 的 Android DayNight 主题
- go - 用结构方法反射结构
- python - Python - Selenium 不会返回上一页
- mysql - 从 MySQL 数据库中选择多个字段重复项
- jquery - 从不同页面导航到主选项卡内的子选项卡
- android - 如何使用 Android Renderscript 填充位图?
- javascript - if { ... } 外部的 Javascript XMLHttpRequest 状态
- angular - 弹性网格不适用于 p-col-#primeng Angular 5
- git - 初始推送后 Git 忽略文件(只读)