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.