Forzar que una aplicación sea una instancia única

Forzar que una aplicación sea una instancia única

¿Hay alguna manera de forzar que una aplicación en Windows sea una aplicación de instancia única, es decir, que no se inicie si ya se está ejecutando otra instancia de la misma aplicación?

Idealmente, quiero poder hacer esto sin necesidad de reemplazar la aplicación real con un código auxiliar, pero no me importaría usar uno si fuera realmente necesario.

Respuesta1

Normalmente hay que implementar esa característica "singleton" directamente en la aplicación. Si desea protegerlo "desde el exterior", debe usar un contenedor que verifique si ya tiene otra instancia ejecutándose. Puede que haya más soluciones para esto, pero una vez hice el truco connsis. La idea es esta:

  • cree un "instalador falso" que en sí mismo sea solo un pequeño contenedor alrededor de la aplicación que desea iniciar
  • haga que el instalador sea un singleton. Mira aquíPermitir solo una instancia de instaladoroCompruebe si su aplicación se está ejecutando
  • Inicie su aplicación desde ese "instalador de contenedor". Mira aquíComplemento ExecCmd
  • "ocultar" el icono de la aplicación normal al usuario y presentar ese instalador falso. Dado que puede agregarle un ícono atractivo, debería poder hacer que se parezca al programa original.

Respuesta2

A menos que exista una solución alternativa, puede aplicarla con elKit de compatibilidad de aplicacionesque permite esto – lo cual dudo (no es el tipo de cosa que por sí misma rompe la compatibilidad 1 ) – entonces no hay ninguna configuración en Windows.

Además de una aplicación de inicio, el otro enfoque sería monitorear nuevos procesos (por ejemplo, eventos de creación de instancias WMI para Win32_Processobjetos, filtrados por sesión, por supuesto) y realizar alguna acción para bloquear la segunda instancia.


1 Por supuesto, podría ser necesaria una solución cuando una aplicación utiliza un mecanismo no compatible para detectar múltiples instancias de sí misma, por lo que el mecanismo de detección necesita una corrección.

información relacionada