2012-01-10 136 views
1

我需要更改USB串行适配器的端口号,我有以下几条找到它,现在我需要将其端口名/ COM号更改为COM11 。C#如何将COM端口更改为指定的端口

我需要的正是这一点,但C#代码:

我的电脑 - >管理 - >设备管理器 - >端口 - >通讯端口 - >端口设置 - >高级 - > COM端口号


 try 
     { 
      ManagementObjectSearcher searcher = 
       new ManagementObjectSearcher("root\\WMI", 
       "SELECT * FROM MSSerial_PortName"); 

      foreach (ManagementObject queryObj in searcher.Get()) 
      { 
       //If the serial port's instance name contains USB 
       //it must be a USB to serial device 
       if (queryObj["InstanceName"].ToString().Contains("USB")) 
       { 
        Console.WriteLine("-----------------------------------"); 
        Console.WriteLine("MSSerial_PortName instance"); 
        Console.WriteLine("-----------------------------------"); 
        Console.WriteLine("InstanceName: {0}", queryObj["InstanceName"]); 
        Console.WriteLine(queryObj["PortName"] + "is a USB to SERIAL adapter/converter"); 
        string port = queryObj["PortName"].ToString(); 
        SerialPort p = new SerialPort(port); 
        //p.PortName = "COM11"; 
        return port ; 
       } 
      } 

      throw new Exception(Messages.PINPAD_NOT_FOUND); 
     } 
+0

如果你正在设置p.PortName你有它注释掉..你有没有试图取消它的注释并返回p.PortName ..?也在你的方法里面,你可以显示完整的方法是什么样的返回类型..? – MethodMan 2012-01-10 15:16:25

+0

当做这样的事情例如更改打印机端口有一个.Put();方法可以检查是否有p.Put();在返回端口之前 – MethodMan 2012-01-10 15:24:40

+0

是的,p.PortName =“COM11”不起作用,我把它放在那里以显示想要的。 SerialPort没有像.Put()这样的方法,我需要一些代码来更新其设置 – 2012-01-10 15:54:34

回答

1

我不认为wmi中有com端口重命名。从技术角度来看,您指向的配置将连接到驱动程序的symbolinc链接更改。我认为这是可行的,但你必须在DDK中看到它(也许在WDM中)。

据我所知,适合您程序的解决方案是能够适应硬件分配的任何名称。您应该将正确的端口名称存储在配置文件或某处的注册表中,并允许用户对其进行自定义。

+0

好的,这似乎是不可能的。我必须和我的软件工作的其他公司谈谈,以消除串行端口映射的要求。他们需要一段时间才能做到,但就是这样 – 2012-01-12 14:04:10