Как закрыть (не убить) другое приложение, у которого нет видимого окна?(С #) - PullRequest
3 голосов
/ 24 сентября 2010

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

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

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

Ответы [ 4 ]

2 голосов
/ 24 сентября 2010

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

1 голос
/ 24 сентября 2010

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

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

1 голос
/ 24 сентября 2010

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

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

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

0 голосов
/ 24 сентября 2010

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

...