c# - studio - Cómo desbloquear el puerto COM
programacion de puertos en c# (2)
No hay una manera buena, fácil:
- Una buena forma es arreglar la otra aplicación; o si eso es imposible, escribir un controlador de dispositivo de filtro (similar al controlador parport pero para puertos serie en lugar de puertos paralelos) que se colocaría sobre el controlador de hardware del puerto serie y que expondría más de un punto de conexión (uno utilizado por la otra aplicación, que pasa al controlador real subyacente, y otra ''puerta trasera'' utilizada por su propia aplicación ... el controlador real solo vería un cliente, es decir, el controlador de filtro que se encuentra encima)
- Una forma fácil es nuclear (terminar por la fuerza) el otro proceso.
Tengo una aplicación que debe funcionar después de otra aplicación. Esta segunda aplicación tiene un error que hace que los puertos COM no se cierren en circunstancias específicas.
Me gustaría cerrar todos los puertos COM programáticamente en mi aplicación para asegurarme de que no haya errores relacionados con puertos cerrados. ¿Es posible si no tengo objetos que abren puertos COM?
Necesito una solución en .NET Framework, C #.
Me encontré con esto recientemente y tengo un poco que añadir ... La mayoría de los controladores de puertos COM "desbloquean" el puerto cuando el dispositivo está habilitado y deshabilitado en el administrador de dispositivos. Esto significa que la forma (C #) para lograr esta tarea se describe en la solución:
Función de API de Win32 para habilitar / deshabilitar el dispositivo mediante programación
La información que necesita saber para usar esa solución para puertos COM es:
- el GUID para puertos COM: {4d36e978-e325-11ce-bfc1-08002be10318} (CLSID_Ports)
- la "ruta de instancia" del puerto que desea restablecer
Como dice que quiere restablecer todos los puertos, le conviene modificar la biblioteca de ese ejemplo para recorrer todos los puertos cambiando:
// 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);
a algo como esto:
for (int index = 0; index < diData.Length; index++)
{
EnableDevice(diSetHandle, diData[index], enable);
}