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

StackOverflow https://stackoverflow.com/questions/1685005

Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top