Título: Duda - Como restringir la aplicacion a una instancia? Publicado por: OscarCadenas_91 en 22 Febrero 2018, 18:08 pm buenas queria preguntarles cual es la forma mas adecuada a hacer esto, basicamente es que tengo una aplicacion hecha en vb.net winform y que lee archivos csv, la aplicacion esta asociada a la extension es decir que al hacer doble clic sobre el archivo inicia y carga el contenido en mi aplicación, uno de los detalles es que si quiero abrir otro archivo se me abre la aplicacion otra ves y lo que quiero es que se abra solo en una.
Estaba leyendo por internet que esto se puede hacer mediante: 1) la api "SendMessage" es decir al iniciar y comprobar si el proceso esta activo y si lo esta enviar los archivos que pasan Environment.GetCommandLineArgs() y luego cerrar la aplicacion. 2)lo mismo que el anterior solo que en ves de verificar si el proceso esta activo usar MUTEX. 3)Hacerlo mediante el WindowsFormsApplicationBase, es decir heredar una clase de WindowsFormsApplicationBase estableciendo la propiedad IsSingleInstance en TRUE. 4) Mediante: Dynamic Data Exchange (DDE) - (Esto si que no tengo mucha idea) Cual de estas formas deberia usar?? Gracias Título: Re: Duda - Como restringir la aplicacion a una instancia? Publicado por: Eleкtro en 22 Febrero 2018, 18:53 pm Duda - Como restringir la aplicacion a una instancia? Solo tienes que hacer un simple click en esta casilla... (https://i.imgur.com/KNDuesy.png) Si estuvieramos hablando de C# entonces la cosa cambiaría, ya que a Microsoft y los devs. de Visual Studio les gusta complicarle la vida a los que programan en C#, jeje, lo apropiado sería crear (y apropiarse de) un MUTEX usando la clase Mutex. Saludos! Título: Re: Duda - Como restringir la aplicacion a una instancia? Publicado por: OscarCadenas_91 en 23 Febrero 2018, 00:59 am muchas gracias por responder
pero aun me queda por resolver como capturar el archivo que intento abrir es decir ya no se abre otra ves pero no puedo obtener el nuevo archivo que intento abrir en mi aplicacion Título: Re: Duda - Como restringir la aplicacion a una instancia? Publicado por: Eleкtro en 23 Febrero 2018, 02:57 am pero aun me queda por resolver como capturar el archivo que intento abrir es decir ya no se abre otra ves pero no puedo obtener el nuevo archivo que intento abrir en mi aplicacion Pensé que ya sabrías como. Puedes usar cualquier tipo de intercomunicación entre procesos (IPC) como por ejemplo MMF (memory mapped file) para compartir un bloque de memoria entre tus procesos y escribir los argumentos recibidos en el stream, o iguálmente lo puedes hacer con una named pipe, o con un socket si me apuras. Tambien puedes usar la clase EventWaitHandle para crear un 'semáforo' global entre tus procesos, aunque ello implicaría la necesidad de adaptar tu código para volverlo asíncrono (ya que la idea sería detener la ejecución de un thread y enviar una señal de reanudación al iniciar la próxima instancia de tu aplicación con los nuevos argumentos). En fin, formas de hacerlo hay muchas. Yo lo que considero más simple para este escenario en concreto sería declarar una clase que implemente la interfaz INotifyPropertyChanged, y listo. Te muestro un ejemplo completo mediante la implementación de INotifyPropertyChanged: CommandLineNotifier.vb Código
ApplicationEvents.vb (la clase donde se controlan los eventos de la aplicación) Código
Form1.vb Código
Saludos. Título: Re: Duda - Como restringir la aplicacion a una instancia? Publicado por: OscarCadenas_91 en 23 Febrero 2018, 06:10 am Muchisimas gracias elektro era justo lo que necesitaba ;-) , gracias por tomarte el tiempo en ayudarme.
Salu2 :D |