Доступ к запущенному экземпляру приложения - PullRequest
1 голос
/ 05 октября 2009

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

Я создал пункты меню оболочки и связал их с приложением. Например Если вы щелкнете правой кнопкой мыши по любой папке, появится надпись «Монитор ОС». Если я нажал на это приложение запущено. Если я снова щелкну правой кнопкой мыши по папке и выберу «OS Monitor», запускается другой экземпляр того же приложения. Я должен предотвратить это. Более того, когда пользователь закрывает форму «Монитор ОС», я просто скрывал ее. Так что, если пользователь снова выбирает ту же опцию меню, то должна отображаться та же самая рабочая форма.

Я создал приложение, используя C # 2005. Кто-нибудь знает, как я могу получить доступ к одному и тому же запущенному экземпляру приложения.

Заранее спасибо.

1 Ответ

0 голосов
/ 05 октября 2009

Поскольку адресные пространства приложений разделены, вы должны использовать некоторый глобальный механизм / объект. Пример называется мьютексами: вы создаете именованный мьютекс, если он уже существует, то приложение уже запущено. Использование Mutexes для обеспечения работы только одного экземпляра представлено в этом блоге

Второй шаг - связь с работающим экземпляром. Поэтому вы должны использовать какой-то механизм IPC. Проще всего использовать сообщения Windows, если вы используете Windows (как в примере из блога). Обратите внимание, что это не будет переносимым на MONO, так как вы должны делать нативные звонки. Если это имеет значение, вы можете использовать сетевое соединение среди других возможностей. См. Ответы на этот вопрос: Механизмы IPC в C # - Использование и лучшие практики .

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

Этот ответ был сделан при условии, что вы можете / хотите внести изменения в «Монитор ОС».

...