С#: как - одно приложение экземпляра, которое принимает новые параметры?

Я создаю (С#) программу, загружающую двоичные файлы с использованием файлов NZB, может быть только один экземпляр моего приложения, запущенного в любое время.

Поэтому, когда пользователь дважды щелкнет .nzb файл, и моя программа не запущена, он должен начать и обработать его (легко, зарегистрировать файл). Теперь, если моя программа уже запущена, я НЕ хочу запускать второй экземпляр - я хочу, чтобы уже запущенный экземпляр забирал указанный файл.

Создание моего приложения с одним экземпляром может быть выполнено с использованием Visual Basic DLL с трюком .IsSingleInstance, но я не хочу туда идти.

Правильный способ, по-видимому, состоит в использовании мьютекса для обеспечения того, чтобы мое приложение было единственным экземпляром, но теперь я зациклился на том, как передать указанный параметр (файл .nzb) в уже запущенный экземпляр.

Помощь будет оценена!: -)

Ответы

Ответ 1

Попробуйте следующее: ваша основная программа создает именованный канал или другое средство связи между процессами и прослушивает его. Вы создаете отдельную небольшую программу, которая при запуске с NZB файлом в качестве параметра открывает канал, передает информацию о нем в файл и завершает работу. Затем ваша основная программа обрабатывает новый файл и загружает его.

Ответ 2

Почему бы не создать одну программу, которая добавит файл в очередь, а затем отпустит программу загрузки, если она еще не запущена. Эта программа загрузки наблюдает за очередью, которая представляет собой просто файл, к которому вы добавляете имена файлов для загрузки.

Ответ 3

Посмотрите на InitialInstanceActivator в проекте Genghis

Ответ 4

Используйте механизм IPC (inter process communication), такой как .NET remoting

Ответ 6

Используя "приятную реализацию", мне пришлось добавить writer.Flush() после WriteLine(), чтобы он работал. Я потратил немного времени, чтобы найти это...