首页 > 解决方案 > 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;
  }
}

这意味着我

  1. 无法选择服务连接的 COM 端口和
  2. 首先无法让服务连接到任何东西:/

我相信我需要的是某种模拟 COM 到 USB 适配器的驱动程序。我已经有一个虚拟 com 端口(由我的其他 C# 程序打开)

我对任何类型的解决方案持开放态度,但我应该可以在非虚拟化 Windows 机器上使用,而且由于(许可证/构建)问题我无法重新编译二进制文件,并且解决方案应该是免费的。

谢谢!

标签: c#windowsserial-portusbvirtualization

解决方案


推荐阅读