![]() |
Com (seriell) Schnittstelle belegt
Hallo,
weiß irgendjemand wie man feststellt ob eine Com Schnittstelle (seriell) belegt ist oder nicht und wie man diese zwangsschliesst? ich benutze Asych pro. Ich habe dort den Code durchgesteppt aber nur eine message gefunden (an das momentan laufende Programm) die zum schliessen auffordert. Irgendwo in der registry (oder sonstwo) muss es doch einen Hinweis geben wer die Schnittstelle offen hat. Wäre nett wenn mir jemand helfen könnte. Rainer |
Re: Com (seriell) Schnittstelle belegt
Wer sie offen hat? Da müsstest du tief in die Trickkiste greifen - wird bestimmt nicht einfach.
Ob wer sie offen hat? Einfach versuchen zu öffnen, Windows verweigert dir dann den Zugriff gesetz den Fall, dass sie schon verwendet wird. Zwangsschliessen? Bietet die WinAPI nicht an und mir ist soweit auch kein Weg bekannt dies zu realisieren. Einzige Möglichkeit die ich sehe, wäre den Prozess abzuschiessen, welcher die Schnittstelle offen hält, in der Hoffnung, dass diese mit geschlossen wird von Windows. Aber dazu müsstest du erstmal rausbekommen, welcher Prozess die Schnittstelle offen hält... |
Re: Com (seriell) Schnittstelle belegt
Hm,
eine ganz harte Methode wäre den Treiber für die entsprechende Com zu deaktivieren und dann wieder zu aktivieren. Rainer |
Re: Com (seriell) Schnittstelle belegt
Hallo,
ich bin mit meinen Bemühungen etwas weiter. Mit WMI lässt sich über win32_serialportconfiguration und Isbusy ermitteln ob die Schnittstelle belegt ist oder nicht. Es gibt auch einen Parameter der nach der ID des Prozesses riecht der die Schnittstelle unter Kontrolle hat. Wenn ich den jedoch auslese bleibt der resultierende String leer. (SettingsID) Vielleicht hat jemand noch eine Idee dazu! Rainer |
Re: Com (seriell) Schnittstelle belegt
Hallo Rainer,
SettingsID ist kein Handle zum owning process, sondern ein identifier für CIM-konformes Management der Schnittstelle. Da mehrere WMI Management Instanzen möglich sind, können die sich dort verewigen. Das ist meine Auffassung davon. Was hast du vor? Willst du die Kontrolle über einen Port an dich reißen, auch wenn ein anderer Prozess diese Resource gerade im Zugriff hat? Freundliche Grüße vom marabu |
Re: Com (seriell) Schnittstelle belegt
Hallo marabu,
danke für deine Antwort, aber leider bekommt man über WMI fast nichts raus, sodass ich auf Vermutungen und rumstochern angewiesen bin. Zu deiner Frage: Eigentlich ist das Ziel rauszukriegen wer die Schnittstelle blockiert und dann den entsprechenden Prozess zu stoppen. Leider tritt bei uns öfter der Fall auf, dass es völlig unklar ist wer die Schnittstelle blockiert. Es ist weder im Taskmanager noch sonstwo irgendein Programm zu sehen das sie kontrolliert. Abmelden nützt nichts, nur totaler shutdown und ausschalten, dann ist sie wieder frei. Mir ist egal wie, aber ich bin mit allem zufrieden was diesen Zustand beendet eventuell auch mit einem Zwangsschliessen der Schnittstelle. Rainer |
Re: Com (seriell) Schnittstelle belegt
Hallo Rainer,
ich vermute du wirst dich mit den undokumentierten Internas von Windows auseinandersetzen müssen um dein Ziel zu ereichen. Das Tool ![]() marabu |
Re: Com (seriell) Schnittstelle belegt
Hallo,
es hat sich herausgestellt, dass das Problem etwas mit dem 16 Bit Subsystem von WinXP zu tun hat. Nur alte DOS Programme die abgeschossen werden lassen die Schnittstelle offen. Ohne totales Abschalten des PC's ist dann nichts mehr zu machen. Rainer |
Re: Com (seriell) Schnittstelle belegt
Hallo,
ich kann nicht glauben, dass, ausser mir, noch nie jemand dieses Problem gehabt hat. Gibt's denn hier niemanden der mir helfen kann? Rainer |
Re: Com (seriell) Schnittstelle belegt
Hallo Rainer,
sieht so aus, als wärst du tatsächlich der erste, der ernsthaft nach einer Lösung sucht. Die Konstellation ist auch etwas verwegen, wenn auch durchaus realistisch - 16-bit Oldtimer als WOW subprocess laufen lassen und abschießen, wenn es Probleme gibt. Besser du schießt den WOW-Prozess gleich mit ab - oder hast du das gemacht und die Resourcen werden trotzdem nicht freigegeben? Grüße vom marabu |
Re: Com (seriell) Schnittstelle belegt
Hi marabu,
(ich bin doch nicht blöd) ich hab natürlich garnichts abgeschossen. Der (scheiss) Zustand ergibt sich von ganz alleine. Ich weiss nur dass es irgendetwas mit einem DOS Tool zu tun haben muss, das auf allen Rechnern läuft auf denen ich dieses Problem habe. Aber ganz allgemein: Es muss doch in diesem Betriebssystem (WinXP oder 2k) irgendwo eine Stelle geben an der die Verknüpfung zwischen einem Programm und einer seriellen Schnittstelle festgehalten wird. Schliesslich stellt XP ja auch fest, dass sie offen ist. Im übrigen bin ich nicht der einzige der dieses Problem hat. Bei uns gibts jede Menge VB Programmierer die sich halt schlecht und recht damit rumschlagen. Ich könnte jetzt auch so tun als wüsste ich von nichts ("fahr halt deinen Rechner runter"). Das dumme daran ist: Ich will dieses Problem lösen! Und zwar unabhängig von diesem Spezialfall! Rainer |
Re: Com (seriell) Schnittstelle belegt
Hallo,
keiner eine Idee dazu? Das gibts doch nicht. Rainer |
Re: Com (seriell) Schnittstelle belegt
Hi!
Von was für einem Dos-Tool reden wir denn? Wir nutzen für die Kommunikation mit unseren Robotern auch die Com-Schnittstelle. Insgesamt haben wir 8 verschiedene Rechner, teilw. mit XP, teilweise mit Windows 2000 und noch nie Probleme gehabt. Ciao Frederic |
Re: Com (seriell) Schnittstelle belegt
Hallo,
wir reden hier überhaupt nicht von irgendeinem bestimmten DOS Tool (hab ich nur als Beispiel benutzt). Wir, bzw. ich möchten wissen wo und von wem letztendlich die Com Schnittstelle verwaltet wird. Bei unseren Rechner handelt es sich nicht um Produktionsmaschinen, sondern um Kundenrechner. Ich habe also überhaupt keinen Einfluss darauf was der Kunde wann installiert. In den letzten 2 Monaten sind bestimmt 20 Anrufe aufgelaufen, die dieses Problem betreffen. Andere Kollegen in unserem Konzern haben dieses Problem ebenso. Wenn man z.B. Hyperterm über den Task-manager abschiesst bekommt man genau die Verhältnisse. Rainer |
Re: Com (seriell) Schnittstelle belegt
Hi Rainer
Bist Du mit Deinem Problem weitergekommen? Ich brauchte ebenfalls dringend eine Lösung. Vielleicht hat das ganze auch mit einem virtuellen Com Port Treiber zu tun, welcher nicht sauber programmiert ist. Ich habe schon mehrmals beobachtet, dass ein ausgesteckter USB-RS232 Adapter den Comport nicht wieder frei gibt und ihn im Gerätemanager als besetzt kennzeichnet. Gruss Andy |
Re: Com (seriell) Schnittstelle belegt
Vielleicht könntest Du über Autostart die serielle Schnittstelle bereits für Dich reservieren, bevor eine andere Applikation darauf zugreifft? :zwinker:
Unsauber, aber wirkungsvoll. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz