2009-05-27 17 views
15

Estoy creando un programa (C#) que descarga archivos binarios usando archivos NZB, solo puede haber una instancia de mi aplicación ejecutándose en cualquier momento.C#: cómo - ¿aplicación de instancia única que acepta nuevos parámetros?

Así que cuando un usuario hace doble clic en un archivo .nzb y mi programa no se está ejecutando, debería iniciarlo y procesarlo (fácil, registro de archivos). Ahora, si mi programa ya se está ejecutando, NO quiero iniciar una segunda instancia; quiero que la instancia que ya está ejecutándose recupere el archivo especificado.

Haciendo que mi aplicación de una sola instancia se pueda hacer usando la DLL de Visual Basic con el truco .IsSingleInstance, pero no quiero ir allí.

La forma correcta parece ser utilizar un mutex para asegurar que mi aplicación sea de instancia única, pero ahora estoy atascado en cómo pasar el parámetro especificado (el archivo .nzb) a la instancia que ya se está ejecutando.

¡La ayuda sería apreciada! :-)

+0

Probablemente esté al tanto de esto, pero puede que esté reinventando la rueda con su aplicación. http://sourceforge.net/projects/sabnzbd/ es solo un ejemplo – dss539

+1

Yup, y hay un sinnúmero de ;-) Es un proyecto de hobby solo para doblar mis dedos con C#, y si me gusta el resultado, el mundo puede ¡termina con solo otro freeware NZB-downloader! :-) – Led

+2

¿Por qué no quiere usar SingleInstanceController de Microsoft.VisualBasic.dll? Es una asamblea dentro del marco como cualquier otra persona. El hecho de que el nombre sea VisualBasic no se usará. Si Microsoft lo hubiera llamado Microsoft.Foo.dll ¡todos lo usarían! – Oliver

Respuesta

2

Pruebe esto: su programa principal crea un conducto con nombre u otro recurso de comunicación entre procesos y lo escucha. Usted crea un pequeño programa por separado que, cuando se ejecuta con un archivo NZB como parámetro, abre el conducto, ingresa la información del archivo en él y sale. Su programa principal luego procesa el nuevo archivo y lo descarga.

0

¿Por qué no tener un programa que agrega el archivo a una cola y luego inicia el programa de descarga si aún no se está ejecutando? Ese programa de descarga mira la cola, que es solo un archivo al que se añaden los nombres de los archivos de descarga.

0

Mira el InitialInstanceActivator en el proyecto Genghis

0

uso de un (comunicación entre procesos) mecanismo IPC como .net remoting

0

Uso de la "buena aplicación", he tenido que añadir un writer.Flush() después de WriteLine() para que funcione. Perdí un poco de tiempo para encontrar esto ...

Cuestiones relacionadas