Detectar instancia de aplicación

NeB1

Como puedo detectar en .Net que ya hay una instancia de mi aplicación abierta, para evitar que se abran dos a la vez?

Por cierto, me interesaría cerrar la OTRA instancia en lugar de la que se acaba de abrir.

LOc0

No he usado .NET pero en mis tiempos de C y winAPI32 para eso me creaba un fichero proyectado en memoria (con un nombre "raro") http://msdn.microsoft.com/en-us/library/aa366537%28v=VS.85%29.aspx y escribía dentro el HANDLE de la aplicación. Cuando otra instancia arrancaba, buscaba el fichero en memoria y si existía podía cerrarse silenciosamente o enviar algún mensaje a la primera instancia (para cerrarla por ejemplo).

Hay más formas como por ejemplo un MUTEX. Tito Google te está esperando.

Salu2 ;)

radykal

En .NET en las propiedades del proyecto puedes establecer que sea instancia única, pero entonces impide que abras una segunda. Para hacer lo que tú buscas, si el nombre del ejecutable es bastante peculiar puedes simplemente a la hora de abrir el programa listar los procesos de Windows, buscar por nombre tu ejecutable, cerrarlo y después seguir abriendo la nueva instancia.

NeB1

#2 con mutex logro encontrar la otra instancia de mi programa, pero no cerrar esta, sino cerrar la nueva

#3 cuando listo los procesos estan los dos, el nuevo y el viejo, y no sé cual de los dos tengo que cerrar.

LOc0

A ver si te gusta esta solución:

Con http://msdn.microsoft.com/en-us/library/1f3ys1f9.aspx sacas la lista de procesos actuales.

Con http://msdn.microsoft.com/en-us/library/system.diagnostics.process.getcurrentprocess.aspx sacas el proceso actual.

Cárgate todos los procesos de la lista que coincidan en nombre pero tengan un ID distinto del que acabas de abrir (si los hay).

Salu2 ;)

PD: mejor todavía, usando la propiedad StartTime http://msdn.microsoft.com/en-us/library/system.diagnostics.process.starttime.aspx cárgate todos los procesos de mismo nombre pero más antiguos (digo que es mejor que lo de arriba porque si intentas abrir de golpe un montón de instancias todas querrían sobrevivir y se liaría xD).

PD2: y mejor todavía En vez de sacar la lista de procesos entera usa esto -> http://msdn.microsoft.com/en-us/library/z3w4xdc9.aspx

NeB1

#5 genial tio! joder, no sé como me ha podido costar tanto encontrar esta info. Con esto creo que me apaño de sobras totalmente! gracias!!!

Usuarios habituales

  • NeB1
  • LOc0
  • radykal