domingo, 15 de fevereiro de 2009

Aplicação como serviço no Windows - parte 2

Continuação de Aplicação como serviço no Windows

No post anterior, criou-se um serviço com o eMule rodando. Eu fiz o teste também com o uTorrent, que funcionou direto sem problemas.

Só que, com o eMule, algo diferente acontece: o programa é fechado quando o usuário faz logoff. O serviço continua rodando, mas o processo morre (não é mais encontrado no "Gerenciador de tarefas do Windows".

Virando o google de ponta-cabeça, descobre-se alguma coisa interessante:
For WIN32 graphical applications: when the currently logged-in user is logging-off, all WIN32 top-level windows receive WM_QUERYENDSESSION and WM_ENDSESSION messages. Some WIN32 applications choose to terminate upon receipt of such messages. In order for your WIN32 application to survive logoff, it must not do that: instead, your windows procedure should call the default windows procedure on these messages.
Aí está o problema: o eMule recebe a mensagem WM_QUERYENDSESSION ou a WM_ENDSESSION e fecha.
Keep in mind that some applications will still terminate at logoff even when running as services as they do not ignore the WM_ENDSESSION or CTRL_LOGOFF_EVENT messages.
E na documentação da Microsoft, nem nota disso...

--------------------------------------------------------------------------------
Solução: usar um "mod" http://emulemorph.sourceforge.net/
Ele tem uma opção interna para criar um serviço...
--------------------------------------------------------------------------------

Fontes:
http://baza-winner.ru/dist/srvany.txt
http://articles.techrepublic.com.com/5100-22_11-5325480.html

Nenhum comentário: