Question

J'ai une application qui doit fonctionner après une autre application. Cette deuxième application a un bogue qui empêche les ports COM de fermer dans certaines circonstances.

Je souhaite fermer tous les ports COM par programme dans mon application afin de garantir qu’il n’y aura pas de bugs signalés concernant les ports proches. Est-ce possible si je ne possède pas d'objets ouvrant des ports COM?

J'ai besoin d'une solution sur .NET Framework, C #.

Était-ce utile?

La solution

Il n’existe aucun moyen simple et efficace:

  • Une bonne méthode consiste à réparer l’autre application. ou, si cela est impossible, écrire un pilote de périphérique de filtrage (similaire au pilote Parport mais pour les ports série au lieu de ports parallèles) qui se trouverait au-dessus du pilote matériel du port série et exposerait plus d'un point de connexion (utilisé par l'autre application, qui passe par le pilote réel sous-jacent, et une autre «porte dérobée» utilisée par votre propre application ... le pilote réel ne verrait qu'un seul client, c'est-à-dire le pilote de filtre placé au-dessus)
  • Un moyen facile consiste à neutraliser (mettre fin de force) à l'autre processus.

Autres conseils

Je suis tombé sur cette information récemment et j’ai un peu à ajouter ... La plupart des pilotes de ports COM "unlock". le port lorsque le périphérique est activé et désactivé dans le gestionnaire de périphériques. Cela signifie que la manière (C #) d'accomplir cette tâche est décrite dans la solution:

fonction API Win32 pour activer / désactiver par programme un périphérique

Les informations à connaître pour utiliser cette solution pour les ports COM sont les suivantes:

  1. le GUID des ports COM: {4d36e978-e325-11ce-bfc1-08002be10318} (CLSID_Ports)
  2. le "chemin de l'instance" du port que vous souhaitez réinitialiser

Puisque vous dites que vous voulez réinitialiser tous les ports, vous souhaitez modifier la bibliothèque dans cet exemple pour effectuer une boucle sur tous les ports en modifiant:

// 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);

à quelque chose comme ça:

for (int index = 0; index < diData.Length; index++)
{
    EnableDevice(diSetHandle, diData[index], enable);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top