C #: come – un’applicazione di istanza singola che accetta nuovi parametri?

Sto creando un programma (C #) che scarica i binari usando i file NZB, potrebbe esserci solo un’istanza della mia applicazione in esecuzione in qualsiasi momento.

Quindi, quando un utente fa doppio clic su un file .nzb e il mio programma non è in esecuzione, dovrebbe avviarlo e processarlo (facile registrazione del file). Ora se il mio programma è già in esecuzione, NON voglio avviare una seconda istanza: voglio che l’istanza già in esecuzione prelevi il file specificato.

Rendere la mia app single-instance può essere fatta usando la DLL di Visual Basic con il trucco .IsSingleInstance, ma non voglio andare lì.

Il modo corretto sembra essere quello di utilizzare un mutex per garantire che la mia app sia single-instance, ma ora sono bloccato su come passare il parametro specificato (il file .nzb) all’istanza già in esecuzione.

L’aiuto sarebbe apprezzato! 🙂

Prova questo: il tuo programma principale crea una named pipe o un’altra funzione di comunicazione tra processi e ti ascolta. Si crea un piccolo programma separato che, quando viene eseguito con un file NZB come parametro, apre la pipe, alimenta le informazioni del file e esce. Il tuo programma principale quindi elabora il nuovo file e lo scarica.

Perché non avere un programma che aggiunge il file a una coda, e quindi avvia il programma di download se non è già in esecuzione. Quel programma di download controlla la coda, che è solo un file a cui si aggiungono i nomi dei file di download.

Guarda InitialInstanceActivator nel progetto Genghis

Utilizzare un meccanismo IPC (inter process communication) come .net remoting

Usando la “bella implementazione”, ho dovuto aggiungere un writer.Flush () dopo WriteLine () per farlo funzionare. Ho perso un po ‘di tempo per trovare questo …