Frage

Ich habe eine Anwendung, die nach einer anderen Anwendung arbeiten müssen. Diese zweite Anwendung hat einen Fehler, die COM-Ports verursacht nicht unter bestimmten Umständen geschlossen werden.

Ich möchte alle COM-Ports programmatisch in meiner Anwendung schließen, um sicherzustellen, dass es keine Fehler berichtet über Ports schließen sein. Ist es möglich, wenn ich Objekte nicht besitzen, die COM-Ports geöffnet?

Ich brauche eine Lösung auf .NET Framework, C #.

War es hilfreich?

Lösung

Es gibt keine gute und einfache Möglichkeit:

  • A gut Art und Weise ist die andere Anwendung zu beheben; oder wenn das nicht möglich ist, einen Filter-Gerätetreiber (ähnlich den parport Fahrer aber für serielle Anschlüsse anstelle von Parallel-Ports) zu schreiben, die auf der Oberseite der seriellen Schnittstelle Hardwaretreiber sitzen würden und die aussetzen würden mehr als einen Verbindungspunkt (eine, die von die andere Anwendung, die über der zugrunde liegenden realen Treiber übergibt, und eine andere ‚Hintertür‘ durch Ihre eigene Anwendung verwendet ... der wahre Treiber nur ein Client sehen würde, dh der Filtertreiber wich oben drauf sitzt)
  • Ein leicht Weg ist (gewaltsam beenden) den anderen Prozess atomisieren.

Andere Tipps

ich auf diese kam vor kurzem und habe ein wenig hinzuzufügen ... Die meist COM-Port-Treiber „Entriegeln“ die Port, wenn das Gerät aktiviert und deaktiviert im Gerätemanager. Dies bedeutet, dass der (C #) Weg, um diese Aufgabe zu erfüllen, wird in der Lösung beschrieben:

Win32-API-Funktion programmatisch aktivieren / deaktivieren Einrichtung

Die Informationen, die Sie wissen müssen, dass die Lösung für die COM-Ports zu verwenden ist:

  1. die GUID für COM-Ports: {4d36e978-E325-11CE-BFC1-08002BE10318} (CLSID_Ports)
  2. die „Instanz Pfad“ des Port, den Sie zurücksetzen möchten

Da Sie sagen, dass Sie zurücksetzen möchten alle die Ports, würden Sie die Bibliothek in diesem Beispiel eine Schleife über alle Ports ändern möchten, indem Sie:

// Find the index of our instance. i.e. the touchpad mouse - I have 3 mice attached...
int index = GetIndexOfInstance(diSetHandle, diData, instanceId);
// Disable...
EnableDevice(diSetHandle, diData[index], enable);

, um so etwas wie folgt aus:

for (int index = 0; index < diData.Length; index++)
{
    EnableDevice(diSetHandle, diData[index], enable);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top