Index




COM Port Manager - ComPortMan V0.8.5

Einstieg

Installation

Konfiguration

Probleme

History

Lizenzvereinbarung




Homepage:
http://www.uwe-sieber.de/comportmane.html


EMail:
mail@uwe-sieber.de







Einstieg



ComPortMan ist ein Window-Dienst, der Kontrolle über die Vergabe von COM-Port-Namen (z.B. COM3, COM4 usw.) verschafft.
Als Windows-Dienst ist ComPortMan, einmal installiert, unabhängig von den Rechten des angemeldeten Nutzers.

Es können neue Standard-COM-Ports für belibige Arten von COM-Ports festgelegt werden, z.B. für USB-Seriell-Adapter.

ComPortMan läuft unter Windows 2000, XP, Server 2003, Vista, Windows 7 und Server 2008.

Unter folgenden Systemen wurde hauptsächlich getestet:
  • Windows XP SP3
  • Windows 7 Ultimate
  • Windows 7 Ultimate x64


    Installation

    ComPortMan kommt nicht in einer SETUP.EXE, die Installation erfolgt manuell, siehe hier: Installation.


    Konditionen

    ComPortMan ist Freeware für die private Nutzung sowie für Bildungseinrichtungen. Anderenfalls ist - nach einer 30-tägigen Testzeit - pro Computer eine Lizenz nötig, s.unten.
    Bildungseinrichtungen gelten als solche, wenn Zahl der eingeschriebenen Schüler und Studenten höher ist als die der sonstigen Mitarbeiter.

    Preise gibts hier:
    http://www.uwe-sieber.de/ComPortMan.html

    Lizenz-Vereinbarung

    Die Software ist auch ohne Lizenz voll funktionsfähig - es gibt keine "Vollversion".





    Wozu?

    Beim erstmaligen Anschließen eines Gerätes, dass sich als COM-Port zu erkennen gibt, ordnet Windows den ersten, in der gesamten Lebensdauer der Windowsinstallation noch niemals benutzten COM-Port zu. Den Port kann man dann im Geräte-Manager mit einiger Klickerei umstellen.
    Für jeden neuen COM-Port geht das Ganze von vorne los, ebenso wenn man ein Gerät, keine USB-Hardware-Seriennummer hat, an einen anderen USB-Port anschließt - ohne Seriennummer wird es dort nicht als das Selbe wiedererkannt.

    Wird ein COM-Port entfernt, bleibt dessen Port-Nummer reserviert.

    Die Reservierung zuvor genutzter COM-Ports ist in Registry unter HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\COM Name Arbiter gespeichert. Zur manuellen aufheben der Reservierung habe ich ein kleines Tool geschrieben:
    http://www.uwe-sieber.de/misc_tools.html#com_ports


    Mit ComPortMan kann man Abhängig von Kriterien vordefinieren, anhand verschiedener Kriterien  welche Geräte welche Portnummern bekommen.








    Installation



    Einfach die ZIP-Datei entpacken, z.B. nach C:\Programme - ein Ordner ComPortMan ist enthalten. Im Ergebnis sollten die Dateien dann z.B. in C:\Programme\ComPortMan liegen.

    Unter Vista und Windows 7 besser in einen Order wie C:\Tools installieren, da unter C:\Programme die ComPortMan.INI kommentarlos in den "Virtal Store" umgeleitet wird, falls sie ein eingeschränkter Nutzer bearbeitet. Falls ein Ordner wie C:\Tools benutzt wird, bitte sicherstellen, dass - genau wie bei C:\Programme - nur Administratoren und "SYSTEM" Schreib- und Ändern-Zugriff haben, sonst könnte böswillige Software die ComPortMan.EXE ersetzen oder die ComPortMan.INI modifizieren, um an höhere Rechte zu gelangen.

    ComPortMan muß auf einem lokalen Laufwerk installiert sein, er funktioniert nicht, wenn er von einem Netz- oder Subst-Laufwerk gestartet wird.

    Dann in die ComPortMan.INI die gewünschen LW-Buchstaben eintragen. Es ist ein Beispiel-INI enthalten - die ComPortMan_sample.INI. Entweder eine neue ComPortMan.INI anlegen oder die ComPortMan_sample.INI in ComPortMan.INI umbenennen und bearbeiten.

    Zum Installieren des ComPortMan-Dienstes einfach die ComPortMan.EXE mit dem Paramter -install starten.
    Genau das macht die _install.cmd

    Damit werden keinerlei Dateien kopiert. ComPortMan wird nur als Dienst registriert und gestartet.

    Ohne Admin-Rechte startet sich die ComPortMan.EXE selbst nochmal und fordert dabei die nötigen Admin-Rechten an.

    ComPortMan trägt sich mit der Startart 'Automatisch' ein - wird also bei jedem Systemstart automatisch geladen.


    Deinstallation:
    Der Dienst kann mit dem Parameter -uninstall gestoppt und deinstalliert werden - das macht die 

    _uninstall.cmd

    Der Unterstrich am Beginn des Dateinames dient allein dazu, die Command-Script-Dateien bei alphabetischer Sortierung am Anfang zu haben...

    Beides geht auch ohne MessageBox:

    ComPortMan -silentinstall
    ComPortMan -silentuninstall

    Es gibt dann bei Erfolg Errorlevel 0, sonst 1 zurück.

    Der installierte Dienst kann mit _stop.cmd und _start.cmd gestoppt und gestartet werden.

    Auf der Kommandozeile kann man auch das Windows-Kommando NET bemühen:

    net stop ComPortMan
    net start ComPortMan

    Hinweis: Wenn der ComPortMan-Dienst gestartet wird, wird die ComPortMan.EXE aus dem Pfad genommen, aus dem der Dienst installiert wurde! Von wo aus der Dienst gestartet wird, spielt keine Rolle, soll ein neues Verzeichnis benutzt werden, dort einmal  _uninstall und dann _install ausführen.


    Die Einstellungen in der ComPortMan.INI können geändert werden, ohne den Dienst neu zu starten - die INI wird bei jedem Anschließen eines COM-Ports gelesen, wenn sich ihr Datei-Datum/Uhrzeit geändert hat.

    Mehr dazu unter Konfiguration.


    Hinweis:

    Die CMD-Dateien enthalten nur einfache Kommandozeilen wie
    ComPortMan -install
    Deshalb müssen sie vom ComPortMan-Ordner aus gestartet werden, sonst wird die ComPortMan.EXE nicht gefunden. Soll die CMD von einem anderen Ordner aus gestartet werden, kann man die CMD-Dateien so anpassen:
    "%~dp0ComPortMan" -install

    %~dp0 ist ein Platzhalter für Laufwerk und Pfad zur CMD-Datei. Das funktioniert so: %0 ist der Platzhalter für die laufende CMD-Datei, z.B. C:\Program Files\ComPortMan\_install.cmd.
    ~dp ist ein "Modifizierer" und liefert Laufwerk plus Pfad (drive + path), z.B. C:\Program Files\ComPortMan\.

    Mehr über Batch-Parameter und Modifizierer:
    http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx






    Konfiguration



    ComPortMan wird über eine INI-Datei namens ComPortMan.INI konfiguriert die im selben Verzeichnis wie die ComPortMan.EXE liegt. Der Windows-Explorer zeigt ja standardmäßig keine Dateierweiterungen wie "INI" an - INI-Dateien nennt er "Konfigurationseinstellungen".
    Eine INI-Datei kann z.B. mit dem Windows-Editor 'Notepad' bearbeitet werden - einfach im Explorer doppelklicken.
    Mitgeliefert wird als Beispiel die ComPortMan_Sample.INI - die kann man sich umbenennen oder eine neue ComPortMan.INI anlegen.

    Das Editieren der ComPortMan.INI erfordert Admin-Rechte, da sie im Programme-Verzeichnis liegt - da haben auf NTFS-formatierten Laufwerken nur Admins Schreibzugriff.
    Unter Vista kann hier der "Virtual Store" zuschlagen: Das Schreiben der INI-Datei wird dann nach 
    C:\Users\(UserName)\AppData\Local\VirtualStore\Program Files\ComPortMan
    umgelenkt. Der ComPortMan-Dienst liest aber aus seinem Verzeichnis. Also unter Vista die USDBLM.INI immer als "echter" Administrator bearbeiten. Oder ComPortMan nicht unter C:\Programme installieren, sondern irgendwo anders, z.B. C:\Tools\ComPortMan - der Vista Virtual Store ist nur für C:\Programme wirksam.


    Wie INI-Dateien funktionieren

    INI-Dateien sind in Abschnitte unterteilt - jeder Abschnitt beginnt mit dem Abschnitts-Namen in eckigen Klammern, z.B. [ComPorts] und erstreckt sich bis zum Beginn des nächsten Abschnitts bzw. beim letzen Abschnitt bis zum Datei-Ende. Jeden Abschnitt darf es nur einmal geben! Die Konfigurations-Einstellungen stehen unter den jeweiligen Abschnitts-Namen - ihre Bedeutung ist abhängig vom Abschnitt in dem sie stehen. Innerhalb eines Abschnitts darf es jeden Wert nur einmal geben.
    Kommentarzeilen beginnen mit einem Semikolon. Kommentare sind nur am Zeilenanfang zulässig.

    Niemals Abschnitts-Zeilen so auskommentieren:

    ;[ComPorts20]

    Die Einstellungen aus diesem Abschitt gehören dann zum vorherigen!
    So legt man einen Abschnitt z.B. korrekt lahm:

    [-----ComPorts10]

    Es ist nach wie vor ein Abschnitt, aber keiner für den sich jemand interessiert.


    Alternativ Regsitry

    ComPortMan kann seine Einstellungen alternativ aus der Registry lesen, und zwar unter
    HKLM/Software/Uwe Sieber/ComPortMan
    Wenn dieser Schlüssel vorhanden ist, wird die ComPortMan.INI ignoriert! Nur die Einstellungen für die Log-Datei kommen immer aus der ComPortMan.INI.
    Für jeden INI-Abschnitt ist ein Schlüssel anzulegen, die Werte müssen vom Typ REG_SZ sein. Damit ComPortMan Änderungen im laufenden Betrieb bemerkt, kann der Wert (Standard) unter HKLM/Software/Uwe Sieber/ComPortMan auf einen anderen (beliebigen) Wert gesetzt werden.. ComPortMan liest dann die Konfiguration neu ein.
    Hier gibt's eine Beispiel REG-Datei (natürlich erst speichern und bearbeiten, nicht gleich ausführen...): http://www.uwe-sieber.de/files/ComPortMan_beispiel.reg

    Unter x64 Windows wird die Win32-Version von ComPortMan umgeleitet nach
    HKLM/Software/Wow6432Node/Uwe Sieber/ComPortMan, also besser die x64-Version einsetzen.


    Einige Beispiele

    Ohne Konfiguration ändert ComPortMan keine COM-Ports.

    Für jeden COM-Port-Typ der eine eigene Behandlung erfahren soll brauch man einen Abschnitt [ComPortsXX]. XX steht für eine Nummer von 1 bis 99 oder keine Nummer - in dieser Reihenfolge werden die Abschnitte ausgewertet.
    Welcher Abschnitt für einen COM-Port zuständig ist, wird über Kriterien gesteuert. Jeder Abschnitt braucht mindestens ein Kriterium.

    Das Tool ListComPorts zeigt einige Daten über die aktuell vorhanden COM-Ports und diese Daten können für ComPortMan als Kriterien genutzt werden.

    Beispiel für ListComPorts' Ausgaben:

    PortName      : COM2
    KernelName    : \Device\Serial0
    DeviceID      : ACPI\PNP0501\1
    FriendlyName  : Kommunikationsanschluss (COM2)
    IRQ           : 7
    IoPort        : 3F8

    PortName      : COM7
    KernelName    : \Device\sscdmdm0
    DeviceID      : USB\VID_04E8&PID_6601&MI_00\9&34C622D7&0&4_00
    FriendlyName  : SAMSUNG Mobile Modem #2

    Wenn man COM2 zurück auf COM1 haben will, nutzt man am besten die nur bei internen Ports vorhandenen Kriterien IRQ und IoPort:
    Grün die Kriterien, violet der Ziel-Port:

    [ComPorts10]
    IRQ=7
    IoPort=3F8
    PortName=COM1

    Um COM7 aus obigem Beispiel auf COM3 zu verschieben:

    [ComPorts20]
    KernelName=\Device\sscdmdm0
    PortName=COM3

    Die Nummern der Abschnitt stehen in keiner Beziehung zu irgendwas. ComPortMan liest [ComPorts1] bis [ComPorts99] und zuletzt [ComPorts] und überprüft die dort festgelegten Kriterien. Der erste Abschnitt mit passenden Daten wird benutzt.

    Wenn ein Port nicht verändert werden soll, legt man einfach einen dafür passenden Abschnitt mit niedriger Nummer an und legt dort keinen Ziel-Port fest. Der Abschnitt ist dann trotzdem zuständig, mangels Ziel-Port wird aber nicht verändert.

    Nachdem die INI angepaßt wurde, kann man ListComPorts nochmals starten - es sollte dann für den jeweiligen Port den zuständigen Abschnitt zeigen:

    PortName      : COM2
    KernelName    : \Device\Serial0
    DeviceID      : ACPI\PNP0501\1
    FriendlyName  : Kommunikationsanschluss (COM2)
    IRQ           : 7
    IoPort        : 3F8
    Section       : [ComPorts10]

    PortName      : COM7
    KernelName    : \Device\sscdmdm0
    DeviceID      : USB\VID_04E8&PID_6601&MI_00\9&34C622D7&0&4_00
    FriendlyName  : SAMSUNG Mobile Modem #2
    Section       : [ComPorts20]


    ComPortMan überpüft die Ports beim Start und wenn ein neuer Port im System erscheint. 
    Um also die Einstellungen für einen externen Anschluß wirksam zu machen, schließt man ihn neu an. Für interne Ports kann man die ComPortMan-Dienst neu starten.




    Einstellungen



    Die im Folgenden beschriebenen Einstellungen sind in der ComPortMan.INI im Abschnitt [Settings] einzutragen.
    In den Beispielen wird immer wieder aufs Neue der Abschnitt [Settings] genannt. Damit ist natürlich der eine gemeinsame Abschnitt gemeint. Es kann nur einen geben...

    Die Einstellungen werden sofort wirksam.


    COM-Ports beim Start überprüfen

    Standardmäßig überprüft ComPortMan die Ports beim Start. Wenn es das nicht tun soll:

    [Settings]
    CheckPortsOnStartup=0


    COM-Ports beim Aufwachen aus Standby und Ruhezustand überprüfen

    Falls sich die COM-Ports nach dem Aufwachen aus Standby und Ruhezustand verändern, kann ComPortMan das korrigieren. Normalerweise ist das aber nicht nötig.

    [Settings]
    CheckPortsOnResume=1


    Quick-and-dirty-Modus

    Bis V0.7 hat ComPortMan Portnummern geändert, indem er die entprechenden Registry-Einträge des jeweiligen Ports ändert und dann das Gerät neu startet. Dieser Neustart kann aber einige Sekunden dauern. Bei Mehrfachports startet ComPortMan das übergeordnete Gerät neu da das etwas schneller geht. Bei USB-Multi-Seriell-Adaptern ist das z.B. dessen eingebauter USB-Hub.
    Das ist die saubere aber oft langsame Methode.

    Im Quick-and-dirty-Modus werden auch die Registry-Einträge geändert, dann aber direkt der alte COM-Port-Name gelöscht und der neue angelegt.
    Beim Entfernen des Ports muß dann ComPortMan den neuen COM-Port-Namen löschen, denn der Treiber wird warscheinlich den ursprünglichen löschen wollen. Wenn der nicht da ist, macht das nichts, ist der Port aber inzwischen durch ein anderes Gerät belegt, könnte dessen Port gelöscht werden. Ob sowas passiert, hängt vom Treiber des Ports ab.

    Die Einstellung gibts zum einen global:

    [Settings]
    QuickAndDirtyMode=1

    Zum Anderen kann man sie auch individuell für einzelne Geräte im jeweiligen ComPorts-Abschnitt vornehmen und so die globale Einstellung überstimmen:

    [ComPorts20]
    DeviceId=FTDIBUS*
    PortNames=COM3,COM4
    QuickAndDirtyMode=0


    Windows COM-Name-Arbiter

    Für jeden COM-Port setzt Windows in der Registry ein Bit, damit dieser Port niemals für neue Geräte verwendet wird. Daher die endlos ansteigenden COM-Port-Nummern...
    Ein Tool zum manuellen Zurücksetzen der Bits ist mein COM Name Arbiter Setter.

    ComPortMan kann hier auch aufräumen, das tut es beim Dienst-Start und wenn ein COM-Port aus dem System entfernt wurde.

    Beispiel: Reservierung für Ports 3, 4 und 10-256 aufheben:

    [Settings]
    ComNameArbiterClean=3,4,10-256

    Für aktuell vorhandene Ports wird die Reservierung aber nicht aufgehoben, außer dem paßt ComPortMan die Reservierung an, wenn es einen Port ändert.


    Debug-Infos

    Wenn es Probleme gibt, kann man u.U. anhand von Debug-Ausgaben herausfinden, was schiefläuft.
    Für Ausgaben in die Log-Datei ist WriteLogFile=1 zu setzen. Standardmäßig wird eine _ComPortMan.LOG ins Stammverzeichnis des Windows-Laufwerks geschrieben. Mit LogFile=Pfad\Datei läßt sich ein anderes Ziel festlegen.
    Für Live-Debug-Ausgaben, die man mit SysInternals DebugView einfangen kann, ist WriteDebugInfo=1 zu setzen.
    Wie dedailiert die Ausgaben ausfallen, wird über den LogLevel 1 bis 5 gesteuert, wobei ab 4 extrem ins Detail geht. Beispiel:

    [Settings]
    LogLevel=3
    WriteLogFile=1
    LogFile=C:\ComPortMan.LOG
    WriteDebugInfo=1

    Die ComPortMan.LOG wird beim Start in ComPortMan_BAK.LOG umbenannt, eine vorhandene ComPortMan_BAK.LOG wird gelöscht.





    Balloon-Tips



    Auch wenn man dank ComPortMan ja weiß, welche Portnummern zugeordnet werden, ist es ganz nützlich, es nochmal angezeigt zu bekommen...
    Wenn aktiviert zeigt ComPortMan ein kleines Hinweis-Fenster mit dem oder den zugeordneten Ports. Der BallonTip verschwindet, wenn man draufklickt oder nach Ablauf der Anzeige-Zeit. Diese beträgt 6 Sekunden und kann in Millisekunden eingestellt werden:

    [BalloonTips]
    Enabled=1
    Timeout=6000

    Wird die Maus über dem Balloon-Tip bewegt, beginnt die Zeit von vorn.




    COM-Ports abhängig von Kriterien




    Man benötigt mehrere Abschnitte [ComPortsXX], in denen jeweils andere Kriterien festgelegt sind.

    ComPortMan liest [ComPorts1] bis [ComPorts99] und zuletzt [ComPorts] und überprüft die dort festgelegten Kriterien. Der erste Abschnitt mit passenden Kriterien wird benutzt.

    Am besten konfiguriert man Abschnitte in 10er-Schritten, dann kann mal problemlos einen Abschnitt einfügen, ohne neu zu numerieren.

    Jeder Abschnit braucht mindestens ein Kriterium.

    Untypisches Beipiel zum Verdeutlichen der Funktionsweise, Kriterien in grün, Ziel-Ports in violett:

    [ComPorts10]
    DeviceID1=USB\VID_067B&PID_2517
    DeviceID2=USB\VID_1234&PID_5678
    PortName1=COM5
    PortName2=COM6

    Dieser Abschnitt wird benutzt, wenn ein COM-Port entweder DeviceID USB\VID_067B&PID_2517 oder USB\VID_1234&PID_5678 hat angeschlossen wird.
    Der Port bekommt dann COM5 zugeordnet falls verfügbar, sonst COM6. Wenn beide belegt sind, bleibt die Portnummer unverändert.

    Hier besteht kein Zusammenhang zwischen den Nummern!

    Typisches Beispiel um o.g. Ports auf je einer bestimmten Portnummer zu haben:

    [ComPorts10]
    DeviceID=USB\VID_067B&PID_2517
    PortName=COM5

    [ComPorts20]
    DeviceID=USB\VID_1234&PID_5678
    PortName=COM6

    Wenn zwei verschiede Geräte die selbe Portnummer bekommen sollen (natürlich nicht gleichzeitig), numeriert man Kriterien gleichen Types, hier für die zwei verschiendenen DeviceIDs:

    [ComPorts10]
    DeviceID1=USB\VID_067B&PID_2517
    DeviceID2=USB\VID_1212&PID_8976
    PortName=COM5

    Hier muß dann eine der DeviceIDs passen.


    Ein weiteres Beispiel:

    Einen bestimmten COM-Port nicht anfassen, alle anderen USB-COM-Ports auf COM3, 4 oder 5

    ;Samsung Modems nicht ändern
    [ComPorts10]
    KernelName=\Device\sscdmdm*
    PortName=

    ;alle anderen USB-COM-Ports auf COM3, 4, 5
    [ComPorts20]
    DeviceID=USB\*
    PortName1=COM3
    PortName2=COM4
    PortName3=COM5

    Oder kürzer mit der Listennotation:

    [ComPorts20]
    DeviceID=USB\*
    PortNames=COM3,COM4,COM5






    COM-Port abhängig vom Kernel-Namen



    Der Kernel-Name ist das wohin der "DOS device name" (COM1, COM2 usw) über einen "symbolic link" verweist.

    Intere ISA oder LPC-Port haben Namen wie \Device\Serial0, \Device\Serial1 usw. Der Kernel-Name anderer Geräte wird von deren Treiber festgelegt, so dass dieser sich zur Identifikation bestimmter Ports eignet.


    ListComPorts zeigt den Kernel-Namen:

    PortName      : COM1
    KernelName    : \Device\Serial0
    DeviceID      : ACPI\PNP0501\1
    FriendlyName  : Communications Port (COM1)
    IRQ           : 7
    Port          : 3F8

    PortName      : COM7
    KernelName    : \Device\sscdmdm0
    DeviceID      : USB\VID_04E8&PID_6601&MI_00\9&34C622D7&0&4_00
    FriendlyName  : SAMSUNG Mobile Modem #2

    PortName      : COM4
    KernelName    : \Device\QCUSB_COM4_2
    DeviceID      : USB\VID_12D1&PID_1001&MI_01\7&36AC8E78&0&0001
    FriendlyName  : HUAWEI Mobile Connect - 3G Application Interface (COM4)



    Beispiel:

    ;Samsung und the Huawei-Modems nicht anfassen
    [ComPorts10]
    KernelName1=\Device\sscdmdm*
    KernelName2=\Device\QCUSB_COM*

    ;alle anderen USB-COM-Ports
    [ComPorts20]
    ParentDeviceID=USB\*
    PortNames=COM3,COM4




    COM-Port abhängig von der Device-ID




    ListComPorts zeigt die Device-IDs:

    PortName       : COM1
    KernelName     : \Device\Serial0
    DeviceID       : ACPI\PNP0501\1
    ParentDeviceID : PCI\VEN_8086&DEV_2918&SUBSYS_00000000&REV_02\3&13C0B0C5&0&F8
    FriendlyName   : Communications Port (COM1)
    IRQ            : 7
    Port           : 3F8

    PortName       : COM4
    KernelName     : \Device\sscdmdm0
    DeviceID       : USB\VID_04E8&PID_6601&MI_00\9&34C622D7&0&4_00
    ParentDeviceID : USB\VID_04E8&PID_6601\7&310D02EB&1&3
    FriendlyName   : SAMSUNG Mobile Modem #2

    PortName       : COM6
    KernelName     : \Device\QCUSB_COM6_1
    DeviceID       : USB\VID_12D1&PID_1001&MI_01\7&36AC8E78&0&0001
    ParentDeviceID : USB\VID_12D1&PID_1001\6&33F5ECF6&0&4
    FriendlyName   : HUAWEI Mobile Connect - 3G Application Interface (COM4)

    PortName       : COM7
    KernelName     : \Device\VCP0
    DeviceID       : FTDIBUS\VID_0403+PID_6001+FTF6DPKEA\0000
    ParentDeviceID : USB\VID_0403&PID_6001\FTF6DPKE
    FriendlyName   : USB Serial Port (COM7)


    Beispiel:

    ;Samsung und Huawei-Modems nicht anfassen
    [ComPorts10]
    DeviceID1=USB\VID_04E8&PID_6601*
    DeviceID2=USB\VID_12D1&PID_1001*

    ;alle anderen USB-COM-Ports
    [ComPorts20]
    ParentDeviceID=USB\*
    PortNames=COM3,COM4

    Manche USB-COM-Ports haben keine USB\xxx Device-ID, das übergeordnete Gerät (ein USB-Hub oder Root-Hub) aber schon.

    Oder einfach das Kriterium BusType nutzen:

    ;alle anderen USB-COM-Ports
    [ComPorts20]
    BusType=USB
    PortNames=COM3,COM4





    COM-Ports abhängig vom FriendlyName



    FrienlyName ist der lesbare Gerätename, der auch im Gerätemanager angezeigt wird.
    ListComPorts zeigt ihn:

    PortName      : COM1
    KernelName    : \Device\Serial0
    DeviceID      : ACPI\PNP0501\1
    FriendlyName  : Kommunikationsanschluss (COM1)
    IRQ           : 7
    Port          : 3F8

    PortName      : COM7
    KernelName    : \Device\sscdmdm0
    DeviceID      : USB\VID_04E8&PID_6601&MI_00\9&34C622D7&0&4_00
    FriendlyName  : SAMSUNG Mobile Modem #2

    PortName      : COM4
    KernelName    : \Device\QCUSB_COM4_2
    DeviceID      : USB\VID_12D1&PID_1001&MI_01\7&36AC8E78&0&0001
    FriendlyName  : HUAWEI Mobile Connect - 3G Application Interface (COM4)



    Beispiel:

    ;Samsung und Huawei-Modems nicht anfassen
    [ComPorts10]
    FriendlyName1=SAMSUNG Mobile Modem *
    FriendlyName2=HUAWEI Mobile Connect *

    ;alle anderen USB-COM-Ports
    [ComPorts20]
    ParentDeviceID=USB\*
    PortNames=COM3,COM4





    COM-Ports abhängig vom BusType



    BusType meint die Art des Anschlusses. Folgende kennt ComPortMan:
  • USB
  • PCMCIA
  • PCI
  • ISA
  • UNKNOWN

    ListComPorts zeigt den BusType:

    PortName       : COM1
    KernelName     : \Device\Serial0
    DeviceID       : ACPI\PNP0501\1
    ParentDeviceID : PCI\VEN_8086&DEV_2918&SUBSYS_00000000&REV_02\3&13C0B0C5&0&F8
    FriendlyName   : Communications Port (COM1)
    BusType        : ISA
    IRQ            : 4
    IoPort         : 3F8

    PortName       : COM4
    KernelName     : \Device\sscdmdm0
    DeviceID       : USB\VID_04E8&PID_6601&MI_00\8&A4D665B&0&3_00
    ParentDeviceID : USB\VID_04E8&PID_6601\7&310D02EB&1&3
    FriendlyName   : SAMSUNG CDMA Modem #2
    BusType        : USB

    PortName       : COM7
    KernelName     : \Device\VCP0
    DeviceID       : FTDIBUS\VID_0403+PID_6001+FTF6DPKEA\0000
    ParentDeviceID : USB\VID_0403&PID_6001\FTF6DPKE
    FriendlyName   : USB Serial Port (COM7)
    BusType        : USB



    Beispiel:

    ;jeden USB-COM-Port auf COM3 oder 4
    [ComPorts20]
    BusType=USB
    PortNames=COM3,COM4





    COM-Ports abhängig vom USB Port




    Beispiel:

    [ComPorts10]
    UsbPort=1-2-3
    PortName=COM7


    ListComPorts zeigt den USB-Port:

    PortName       : COM7
    KernelName     : \Device\VCP0
    DeviceID       : FTDIBUS\VID_0403+PID_6001+FTF6DPKEA\0000
    ParentDeviceID : USB\VID_0403&PID_6001\FTF6DPKE
    FriendlyName   : USB Serial Port (COM7)
    BusType        : USB
    UsbPort        : 1-2-3



    Der USB-Port als Kriterium ist auch gut geeignet um USB-Mehrfach-Adapter in der erwarteten Reihenfolge COM-Ports zuzuordnen. Die Reihenfolge in der Windows die Ports meldet stimmt leider nicht zwangläufig mit der Hardware überein.
    Mit dem letzen Teil des USB-Port-Names hat man aber die Portnummer innerhalb des Multi-Adapters als Kriterium zur Verfügung:

    Beispiel für einen Prolific 4-fach Adapter auf COM11 bis COM14 in der erwateten Reihenfolge:

    [ComPorts21]
    PortName=COM11
    FriendlyName=Prolific*
    UsbPort=*-1

    [ComPorts22]
    PortName=COM12
    FriendlyName=Prolific*
    UsbPort=*-2

    [ComPorts23]
    PortName=COM13
    FriendlyName=Prolific*
    UsbPort=*-3

    [ComPorts24]
    PortName=COM14
    FriendlyName=Prolific*
    UsbPort=*-4


    Hinweis: Mit V0.8.3 hat sich die erste Stelle im Port-Namen geändert. Damit ist ComPortMan kompatibel mit USBDLM und UsbTreeView.









    Wildcards



    Bei der Konfiguration aller Kriterien können Wildcards (=Platzhalterzeichen) benutzt werden. 
    Dabei steht der Stern '*' für Null bis n Zeichen, das Fragezeichen '?' für genau ein Zeichen.

    Buchstaben werden unabhängig von Groß/Kleinschreibung ausgewertet.


    Beispiel        | paßt für                | paßt nicht für
    ----------------+-------------------------+------------------
    \Device\Serial? | \Device\Serial0,        | \Device\Serial20
                    | \Device\Serial9         |
    ----------------+-------------------------+------------------
    USB\VID_*       | alles was mit USB\VID_  | PCI\VEN_...
                    | beginnt                 |
    ----------------+-------------------------+------------------
    *\VID_*         | alles was USB\VID_      | PCI\VEN_...
                    | enthält                 | 
    ----------------+-------------------------+------------------
    2-1-*           | 2-1-1, 2-1-7, 2-1-1-3   | 2-1, 1-1-1
    ----------------+-------------------------+------------------
    2-1-?           | 2-1-1, 2-1-7            | 2-1, 2-1-1-3
    ----------------+-------------------------+------------------
    *-1             | 2-1-1, 13-5-1           | 1-2, 13-5-2
    ----------------+-------------------------+------------------








    Technische Infos



    Hier ein paar Hintergrundinformatioen - was mir gerade so eingefallen ist. Manches findet sich auch an anderer Stelle in dieser Hilfe.


    Window-Dienst

    ComPortMan ist ein Window-Dienst. Window-Dienste werden als solche in die Registry eingetragen und vom "Service Control Manager" gestartet und angehalten.

    Dienste laufen meist im Kontext "Local System" und habe dort maximale Privilegien. ComPortMan ist ein Win32-Dienst, also kein Kernel-Dienst. Als Kernel-Dienst könnte man ihn mit dem Start-Typ "System" versehen - so wäre sichergestellt, dass er vor dem Nutzer-Login fertig geladen ist. Win32-Diensten ist das nicht vergönnt - hier ist "Automatisch" der frühestmögliche Start. Damit ist es möglich, dass der Nutzer eingeloggt wird, bevor ComPortMan startet, siehe auch "ComPortMan-Dienst startet zu spät" unter Probleme.



    Generieren einer MSI-Datei




    Mit einer MSI-Datei kann man ComPortMan mittels Gruppenrichtlinie im Netzwerk verteilen - Admin wissen das besser als ich...

    Die ComPortMan.MSI die bis einschließlich V4.5.9 geliefert wurde, ist mit OnDemand WinInstall LE generiert.
    Bug: Für alle Versionen habe ich identische Product- und Package-IDs benutzt. Vorteil: Mit jeder Version kann man eine andere deinstallieren. Nachteil: Updates funktionieren nicht, für ein Update muß man deinstallieren und erneut installieren.

    Ab V4.6 wird das Microsoft WIX toolset genutzt. Hier sind im WiX-Script für Product- und Package-ID ein "*" konfiguriert, so dass WiX immer neue GUIDs generiert. So funktionieren Updates, zum Deinstallieren muß aber die selbe Version wie zur Installation genutzt werden.

    Zum Updaten sehr alter Versionen bitte zuerst V4.4 installieren, dann erst die aktuelle Version. Das MSI benutzt zum Anhalten des ComPortMan-Dienstes dessen Kommandozeilenparameter -silentstop und diesen gibt es erst seit V4.4.

    Hier gibts das WIX-script für ComPortMan: ComPortMan.WXS

    Und hier das Microsoft WIX toolset. Die WIX35.MSI herunterladen, mit recht anklicken -> Installieren.
    Fall ein Warndialog kommt, mit OK bestätigen (da gehts nur um die Visual Studio Integration).

    WiX instlalliert sich in den Standard-Programme-Ordner, typischerweise "C:\Programme\Windows Installer XML v3.5".

    WiX benötigt das .NET Framework 3.5 SP1.

    Dann die angepaßte ComPortMan.INI in den ComPortMan-Ordner kopieren, ebenso die ComPortMan.WXS. In der ComPortMan.WXS ComPortMan_sample.ini in ComPortMan.ini ändern.

    Dann im ComPortMan-Ordner eine CMD- oder BAT-Datei anlegen, die das MSI generiert, etwa so:


    @echo off
    set WiX_Path=%ProgramFiles%\Windows Installer XML v3.5\bin

    if not exist "%WiX_Path%" echo !!!!!!!!!!! WiX nicht gefunden !!!!!!!!!!!!! & pause & goto ExitPoint

    rem -- sicherstellen, dass der ComPortMan-Ordner der aktuelle ist --
    %~d0
    cd %~p0

    rem -- WiX candle und light ausführen, Pause falls Fehler --

    "%WiX_Path%\candle.exe" -dProcessorArchitecture=x86 -arch x86 -out ComPortMan.wixobj ComPortMan.wxs
    if errorlevel 1 pause & goto ExitPoint

    "%WiX_Path%\light.exe" -out ComPortMan.msi ComPortMan.wixobj 
    if errorlevel 1 pause & goto ExitPoint

    rem -- aufräumen --
    del ComPortMan.wixobj
    del ComPortMan.wixpdb

    :ExitPoint


    Für die x64-Version ist zweimal x86 in x64 zu ändern:
    "%WiX_Path%\candle.exe" -dProcessorArchitecture=x64 -arch x64 -out ComPortMan.wixobj ComPortMan.wxs


    Die Datei ComPortMan.wixpdb wird dort angelegt, wo auch das MSI hinkommt. Wenn man also einen alternativen Ausgabepfad angibt (-out), dann diesen auch in der Zeile mit "del ComPortMan.wixpdb" angeben.















    Probleme



    Falscher COM-Port für einen kurzen Moment

    Ein neu angeschlossenden COM-Port überprüft ComPortMan die Portnummer zum frühstmöglichen Zeitpunkt. Wenn aber eine Anwendung auch diesen frühstmöglichen Zeitpunkt nutzt, sieht sie u.U. den alten COM-Port, den ComPortMan dann gleich ändert. Das dauert je nach Treiber bis zu vier Sekunden, es sei denn man nutzt den Quick-and-dirty-Modus.



    Fehler 193

    Wenn der Start des ComPortMan-Dienstes mit Fehler 193 fehlschlägt (ERROR_BAD_EXE_FORMAT), liegt das warscheinlich an unzureichenden Zugriffsrechten auf die ComPortMan.EXE. Das Konto "SYSTEM" muß für den ComPortMan-Ordner mindestens das Recht "Lesen, Ausführen" haben.
    Einstellen kann man das mit Rechtsklick auf den Ordner -> Eigenschaften -> Reiter "Sicherheit".


















    History



    V0.8.5.0 (04. Juli 2012)
  • Bugfix: -silentstop (wird vom MSI beim Deinstallieren genutzt) war nicht implementiert

    V0.8.4.0 (03. Juli 2012)
  • Bugfix: -install und -uninstall haben nicht funktioniert

    V0.8.3.0 (10. Juni 2012)
  • Bugfix: Falscher Balloontip wenn mehrere verschiedene COM-Geräte an den selben USB-Hub angeschlossen sind
  • Änderung: Die erste Stelle im USB-Portnamen wurde geändet um kompatibel mit USBDLM und UsbTreeView zu sein

    V0.8.2.0 (1. März 2012)
  • Bugfix: COM-Port entfernt wenn alle konfigurierten COM-Ports belegt sind

    V0.8.1.0 (29. Feb 2012)
  • Bugfix: Erkennung von Multi-Adaptern hat mit manchen Geräten nicht funktioniert
  • Neu: "Quick-and-dirty Modus" ist default, siehe Settings

    V0.8.0.0 (27. Feb 2012)
  • Neu: Schneller "Quick-and-dirty Modus" verfügbar, siehe Settings
  • Neu: Windows COM-Port Reservierungen können entfernt werden, siehe Settings

    V0.7.0.0 (22. Feb 2012)
  • Neu: COM-Ports sortiert im Balloontip

    V0.6.1.0 (17. Feb 2012)
  • Bugfix: Beim USB-Port-Namen fehlte bei manchen Geräten die letzte USB-Portnummer

    V0.6.0.0 (16. Feb 2012)
  • Bugfix: Fehlerhafte Behandlung von USB Multiport-Adaptern

    V0.5.0.0 (15. Feb 2012)
  • Neu: COM-Ports abhängig vom USB-Port
  • Neu: Balloontips beim Anschließen eines COM-Ports

    V0.1.0.0 (25. Jan 2012)
  • Erste veröffentlichte Version





    Software-Lizenz ComPortMan




    Stand 24. Januar 2012

    1. Gegenstand des Vertrages  
      Gegenstand des Vertrages ist die beiligende Software, die
      Programmbeschreibung und Bedienungsanleitung, sowie sonstiges zugehöriges
      schriftliches Material, im folgenden auch als Software bezeichnet. Der Autor
      macht darauf aufmerksam, dass es nach dem Stand der Technik nicht möglich ist,
      Computersoftware so zu erstellen, dass sie in allen Anwendungen und
      Kombinationen fehlerfrei arbeitet. Gegenstand des Vertrages ist daher nur
      eine Software, die im Sinne der Programmbeschreibung und der
      Benutzungsanleitung grundsätzlich brauchbar ist.

    2. Lizenzgewährung
      Der Autor gewährt jedem interessierten Anwender im privaten Umfeld, öffentlichen
      Bibliotheken deren Nutzung kostenlos ist, sowie Bildungseinrichtungen eine
      kostenlose Nutzungslizenz. Eine Bildungseinrichtung gilt als solche, wenn
      Schüler und Studenten gegenüber sonstigen Mitarbeitern in der Mehrheit sind.
      Es ist dann keine explizite Lizenzerteilung erforderlich.

      Sonstigen Anwendern wird eine Testlizenz für einen Testzeitraum von 30
      Kalendertagen eingeräumt. Nach Ablauf dieser Testlizenz muss der Anwender
      entweder eine Nutzungslizenz pro Computer erwerben oder die Software muss
      von den betreffenden Computern entfernt werden.

      Der Lizenznehmer erhält das nicht ausschließliche, unwiderrufliche,
      übertragbare, zeitlich und räumlich unbeschränkte Recht, die Software auf
      der entsprechenden Anzahl von Computern innerhalb seiner Firma bzw. 
      Organisation einzusetzen.

      Ausnahme ist die "Standort-Lizenz", die für eine unbegrenzte Anzahl von
      Computern innerhalb der Organisation des Lizenznehmers gültig ist, die
      sich in 160 Kilometer Umkreis oder auf Reisen befinden.
      
      Eine Weltweit-Lizenz gilt für eine unbegrenzte Anzahl von Computern innerhalb
      der Organisation des Lizenznehmers, egal wo.

      Die Nutzungslizenz gilt für alle Versionsnummern der Software jetzt und in
      Zukunft für die entsprechende Anzahl von Lizenzen.
      Der Lizenznehmer hat kein Recht auf Updateversorgung durch den Autor, da
      aktuelle Versionen zum Download stehen.

      Überprüfbarer Beleg für die Lizenz ist die überlassene Lizenznummer. Diese
      wird für den Betrieb der Software nicht benötigt. Die Software hat keine
      eingebauten Beschränkungen und läuft nicht ab.

      Die Software kann frei kopiert und weitergegeben werden, soweit folgende
      Bestimmungen beachtet werden:  Die Software darf nur in den vom Autor
      erstellten MSI- oder ZIP-Archiven weitergegeben werden. Keine Datei darf im
      Inhalt irgendwie verändert werden, außer für internen Gebrauch.

    3. Keine weiteren Rechtsansprüche  
      Der Autor ist sowohl Urheber als auch Eigentümer der Software, sowie in
      dieser Software verwendeter Algorithmen und Verfahren. Der Autor behält den
      Rechts- und Besitzanspruch an der Software.


    4. Keine Modifikationen oder Dekompilierung
      Es ist nicht gestattet, die Software oder Kopien im Ganzen oder teilweise
      zu verändern, zu übersetzen, zu disassemblieren oder zu dekompilieren.

    5. Redistribution
      Redistribution der unveränderten Software-Archivdateien auf CD/DVD von 
      Computer-Zeitschriften und sonstigen Publikationen ist gestattet.
      Zum Download bitte auf http://www.uwe-sieber.de/files/ComPortMan.zip verweisen.

    6. Haftungsausschluß-Erklärung
      Soweit gesetzlich zulässig, haftet der Autor oder der Händler auf keinen Fall
      für irgendwelche Schäden aus entgangenem Gewinn, Betriebsunterbrechung,
      Datenverlust, für Schäden an Hardware oder anderer Schäden gleich welcher Art,
      die aus der Benutzung dieser Software oder aus der Tatsache, dass sie nicht
      benutzt werden kann, resultieren, selbst wenn der Autor oder der Händler auf
      die Möglichkeit solcher Schäden hingewiesen oder unterrichtet wurden. In jedem
      Fall ist die gesamte Haftung seitens des Autors oder des Händlers unter
      jedweder Bestimmung begrenzt auf die Summe, die von Ihnen tatsächlich für
      diese Softwarelizenz bezahlt worden ist. Der Autor haftet nicht für Schäden,
      es sei denn, dass ein Schaden durch Vorsatz seitens des Autors verursacht
      worden ist. Gegenüber Kaufleuten wird auch die Haftung für grobe
      Fahrlässigkeit ausgeschlossen. Eine Haftung wegen evtl. vom Autor
      zugesicherten Eigenschaften bleibt unberührt. Eine Haftung für

      Mangelfolgeschäden, die nicht von der Zusicherung umfasst sind, ist
      ausgeschlossen.


    7. Gewährleistung
      Der Autor übernimmt keine Haftung für die Fehlerfreiheit der Software.
      Insbesondere übernimmt der Autor keine Gewähr dafür, dass die Software den
      Anforderungen und Zwecken des Erwerbers genügt oder mit anderen von ihm
      ausgewählten Programmen zusammenarbeitet. Die Verantwortung für die richtige
      Auswahl und die Folgen der Benutzung der Software, sowie der damit
      beabsichtigten oder erzielten Ergebnisse, trägt der Erwerber. Das gleiche gilt
      für das die Software begleitende schriftliche Material.


    8. Gesetzesanwendung
      Dieser Vertrag unterliegt der Gesetzgebung der Bundesrepublik Deutschland und
      ist so anzuwenden, als ob die betreffenden Rechtsgeschäfte in der
      Bundesrepublik Deutschland stattfänden.


    9. Auflagen
      Der Autor hat das Recht, den Vertrag und die Lizenzrechte sofort zu kündigen,
      falls Sie die Bestimmungen dieses Vertrages nicht erfüllen.