Одноэкземплярное приложение с передачей сообщений через строку cmd?

У меня есть приложение C #, которое запускается из командной строки. Обычно данные передаются через командную строку, например add (app -a string). Я бы хотел, чтобы был открыт только ОДИН экземпляр приложения, и если через командную строку добавлено больше строк, я бы хотел, чтобы единственный экземпляр знал об этом и обновлялся. Я могу либо правильно поместить данные в базу данных и передать сообщение о работающем экземпляре, либо сообщение и передать данные работающему экземпляру и позволить ему поместить их в базу данных и обновить себя.

Как мне сделать это в C # .NET? (3.5)


person Community    schedule 06.11.2009    source источник


Ответы (1)


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

В качестве альтернативы вы можете использовать .NET Remoting и зарегистрировать хорошо известный тип, который могут активировать другие экземпляры приложения, с поведением, аналогичным описанному выше.

В конце концов, быстрый поиск по «IPC» или «Межпроцессному взаимодействию» может открыть другие альтернативы. Но я считаю, что подход именованного канала является самым чистым и его проще всего реализовать / расширить.

Для обнаружения «первого запуска» вы также можете создать именованный мьютекс, если вы выберете механизм IPC, который не показывает состояние сбоя при нескольких запусках (например, используя базу данных в качестве посредника для обмена данными ). Никакие два обработанных не могут «создать» мьютекс с тем же именем, это то же ограничение, что и для именованных каналов, поскольку эти имена управляются ядром (и, таким образом, охватывают границы процесса, сеанса, рабочего стола и оконной станции).

person Shaun Wilson    schedule 06.11.2009