Как закрыть (не убить) другое приложение, у которого нет видимого окна? (С#)

У меня есть программа установки, в которой я хотел бы убедиться, что мое приложение в данный момент не запущено. Если это так, я хотел бы закрыть его (не убивать, так как приложение должно сохранять некоторые данные при выходе). Дополнительная проблема заключается в том, что окно моего приложения скрыто (вместо него отображается значок в трее), поэтому Process.MainWindowHandle всегда равен 0.

Что я могу сделать, чтобы сигнализировать о закрытии моего приложения? Могу ли я отправить сообщение непосредственно в Приложение (а не в окно)?

Ваша помощь будет принята с благодарностью. Грегор


person Gregor Leban    schedule 24.09.2010    source источник


Ответы (4)


Просто добавьте еще кое-что: именованные каналы.

person snemarch    schedule 24.09.2010

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

У вас также может быть какая-то реализация очереди сообщений (она есть в Windows, или вы можете использовать что-то вроде SQL Service Broker), и одно приложение отправляет сообщения в очередь, а другое читает из очереди

Вы также можете проверить это: http://msdn.microsoft.com/en-us/library/ms644950(VS.85).aspx

person turtlepick    schedule 24.09.2010

Вероятно, вы могли бы использовать WINAPI для поиска дескриптора окна (даже если он скрыт) по классу или тексту окна. Затем отправьте сообщение Windows в приложение, чтобы закрыть его.

http://support.microsoft.com/kb/178893

person Mike Cheel    schedule 24.09.2010

Вы можете использовать функцию WinAPI PostThreadMessage (через PInvoke) .

person gandjustas    schedule 24.09.2010