Frage: Kennt jemand einen Weg dies herauszufinden?
Thomas Weber
Produktmarketing
mit der seriellen schnittstelle lässt sich nur eine p2p verbindung
erstellen.
wenn also euer gerät z.B. an com1 angeschlossen ist, kann dieser port
wohl kaum von anderen geräten belegt werden. wenn euer kunde eine
software lädt, welche z.b. die interrupt-vektoren ändert, ist er selber
schuld und ihr könnt kaum was dagegen tun. ich glaube aber kaum,
dass sowas passiert.
was ich eher für möglich halte ist, dass der kunde die software unter winnt
oder 2000 laufen lässt und die software direkt auf den port zugreift, was
das betriebssystem nicht zulässt. daher die fehlermeldung "zugriff
verweigert."
eine weitere möglichkeit wäre, dass euer programm einen "fehler?" hat und
den port in eine art initialisierungszustand versetzt, in dem die sende-
und empfangsregister gesperrt werden. z.B. line control register bit 7
auf "1".
mir ist keine andere möglichkeit bekannt, wie ein com port gesperrt werden
könnte.
gruss phil
...
Eine fertige Loesung zur Verwendung in einem Programm habe ich nicht parat,
aber unter
http://www.sysinternals.com/ntw2k/freeware/portmon.shtml
gibt es einen Port-Monitor, in dem man sieht welche Anwendungen auf die
seriellen Schnittstellen zu greifen. Da es Freeware ist, kann es sicher auch
fuer die schenlle Hilfe beim Kunden eingesetzt werden.
Programmieransaetze sind dort auch beschrieben. In der gleichen Art wuerde
ich eine entsprechende Komponente schreiben, die programminteren
funktioniert ...
Kalle
--
Entwicklung, Beratung und Schulung - Softwarekomponenten, C++ und XML
Software Service KHP
Do not reply! There is the garbage collection :-(
No Spam Contact: http://home.t-online.de/home/kalle.sws_khp/
Bei WinNT und Win2000 erfolgt der Zugriff auf ein COM Port mit der API
Funktion CreateFile(.....) oder über die Klasse FileStream........ Beides
führt zu einem INVALID_HANDLE_VALUE und die Auswerung des Error Codes zeigt
"Zugriff verweigert". Was nichts anders bedeutet, als daß das Port von einer
anderen Anwendung göffnet wurde und "belegt" ist.
Ich suche nun einen Weg dem Kunden anzuzeigen, welche Anwendung das Port
belegt, denn auf heutigen Rechnern laufen so allerlei Anwendungen und es ist
nicht unbedingt ein toller Weg, mal auf Verdacht alle zu schließen, bis
endlich das Port mal frei ist.
Gruß
Tom
Das Programm kenne ich. Wenn die Anwendung, welche das Port belegt, gerade
nichts sendet, und das vielleicht über Stunden, dann zeigt auch der Portmon
nichts an, und das Port ist trozdem belegt.
Gruß
Tom
> Das Programm kenne ich. Wenn die Anwendung, welche das Port belegt, gerade
> nichts sendet, und das vielleicht über Stunden, dann zeigt auch der
Portmon
> nichts an, und das Port ist trozdem belegt.
Ok, es sollte ja auch nicht die Loesung sein, sondern nur der Hinweis, dass
es moeglich die Prozesse zu finden. Eine auf Deine Anforderungen
zugeschnittene Loesung muss natuerlich noch programmiert werden. Der zuvor
genannte Link zeigt einen Weg, der in der konkret Umsetzung sicher noch
einige Arbeit erfordert :-( .
Einverstanden - Portman mit Autostart starten, ein Logfile schreiben und bei
Problemen auswerten ist sicher keine endgueltige Loesung, die man vielen
Kunden zumuten kann ..., ausserdem hat Portmon manchmal auch Probleme!
Ich bin schon so genervt von diesem Kunden, daß ich ihm genau das empfohlen
habe.
Und siehe da, er hat keine Administrator Rechte und der gute Portmon läuft
nicht. Jetzt muß er halt
mitschreiben welche Anwendung er startet und wann unser Device nicht mehr
geht.
Gruß Tom
http://www.hhdsoftware.com/sermon.html
gruss phil
"Thomas Weber" <p...@simons-voss.de> schrieb im Newsbeitrag
news:OxmsRsC4...@TK2MSFTNGP12.phx.gbl...
schreibe einen kleinen Dienst, der die Schnittstelle beim Systemstart öffnen
lass dir von deinem Programm das port handle geben (wenn der Dienst läuft)
und arbeite damit
dann haben die anderen Programme keinen Zugriff mehr
Keine schlechte Idee, aber was machst Du falls ein anderer Programmierer
schon den Holzhammer vor Dir anwendet und der andere Dienst schon die
serielle Schnittstelle geoeffnet hat?
:-( Kalle