c#串行端口重定向

c#串行端口重定向,c#,windows-mobile,serial-port,C#,Windows Mobile,Serial Port,有没有一种方法可以在c#中编写串行端口重定向器?我有一个应用程序被编码为使用端口1(com1:),但是,我的手持设备(Intermec CN50)上的端口始终为3。我没有权限修改移动软件,但是我想将任何数据重定向到1以将其复制到3,以及将任何数据从3复制到1,因此应用程序不知道区别 我知道这是一个困难的问题,但我相信你们当中有一个人有答案 我当然不会 谢谢 克里斯:不,没有。根据设备和您的具体需求,您有两种选择 第一个也是最简单的方法是重定向驱动程序。如果您的设备尚未定义COM1设备,您可以在H

有没有一种方法可以在c#中编写串行端口重定向器?我有一个应用程序被编码为使用端口1(com1:),但是,我的手持设备(Intermec CN50)上的端口始终为3。我没有权限修改移动软件,但是我想将任何数据重定向到1以将其复制到3,以及将任何数据从3复制到1,因此应用程序不知道区别

我知道这是一个困难的问题,但我相信你们当中有一个人有答案

我当然不会

谢谢
克里斯:不,没有。根据设备和您的具体需求,您有两种选择

第一个也是最简单的方法是重定向驱动程序。如果您的设备尚未定义COM1设备,您可以在
HKLM\drivers\builtin
中修改注册表,并将特定端口的索引从
3
更改为
1
。这将导致device.exe将端口公开为COM1而不是COM3。根据我的经验,这不太可能奏效,因为大多数串行端口都设置为允许操作系统自动分配索引,这意味着COM1和COM2已经在使用。但是,您仍然可以解决这个问题。您只需为设备的每一个3或3以下的实例显式分配一个索引。将索引1移动到3和索引3移动到1,可以有效地交换端口

这里有一些例子-有几个,因为这取决于OEM如何设置驱动程序初始化。下面是一个没有显式端口名的驱动程序示例(在本例中为I2C,但其工作方式相同):

注意有一个
前缀
和一个
索引
。此驱动程序将枚举为“I2C0:”。如果将
索引
值更改为其他值,例如“2”,则它将枚举为“I2C2:”

在某些情况下,驱动程序可以提供特定的端口名,如下所示:

请注意,
端口
值与
前缀
加上
索引
匹配。不知道如果手动设置它们会发生什么,所以不要这样做。如果你想把这个移到COM3,你可以把
索引
改为3,把
端口
改为COM3,但是你必须确保注册表中没有其他设置可以使用这些值。您不希望两个驱动程序实例尝试在同一索引上枚举。如果您这样做,我认为第二个值只是递增的,但是最好显式地将值设置为唯一值,这样您就知道发生了什么


如果这不能满足您的需要,您必须编写一个实际的设备驱动程序来执行端口移动/聚合。它的工作原理与Windows Mobile下现有的GPS中间驱动程序(GPSID)非常相似,允许您将串行数据重定向到所需的任何端口。但是,这必须用C编写,因为托管代码(在CF中)无法导出本机符号,因此无法让device.exe加载C程序集。

您只需为设备的3或3以下的每个实例指定一个索引即可。将索引1移动到3和索引3移动到1,可以有效地交换端口。我已经将tusbvcp设备上的端口设置为com1:并且它仍然访问com3:而不是com1:您是否也更改了索引?您必须在更改后进行软重置,以使驱动程序重新加载。非常感谢。你的回答直接解决了我的问题。我重新启动,它工作得很好。