Como executar um programa em java a partir de um serviço windows (em java)

Tenho um serviço em execução no Windows feito em Java e instalado com wrapper, sua função é monitorar os processos em execução na máquina para verificar se um determinado processo está ou não em execução e iniciá-lo automaticamente, caso ele pare.

Essa aplicação monitorada é executada com Java Web Start e deve estar disponível 24x7x365.

Mas, o serviço ao verificar que a aplicação não está no ar, faz a sua inicialização em 2º plano (chama o JWS e carrega com o javaw) e não fica visível para o usuário, nem minimizado, só ocupa memória. Se o comando for externo ao serviço, funciona perfeitamente.

public void executa() throws IOException, ClassNotFoundException, SQLException
{
   Runtime.getRuntime().exec("cmd /K C:\\java\\jre1.5.0_05\\bin\\javaws.exe " + getURLServidorJavaWebStart());
}

O método getURLServidorJavaWebStart() apenas obtém o endereço que deve ser invocado no banco de dados local da aplicação.

Preciso que o serviço execute a aplicação em primeiro plano, e não sem segundo.

Agradeço o auxílio.

Um serviço não pode executar aplicações em primeiro plano. Isso é inerente ao Windows. Ele pode até ser configurado para "aceitar interação com o desktop" (Propriedades, aba Logon, Fazer Logon como (.) Conta de sistema local [X] Permitir que o serviço interaja com a área de trabalho), mas não pode ele mesmo iniciar uma aplicação em primeiro plano.

É necessário que alguém se logue e inicie a aplicação - você pode pô-la no menu Iniciar -> Todos os Programas -> Inicializar.

Por exemplo: você pode fazer que uma aplicação (que fique minimizada, só que deve ser iniciada a partir do menu Iniciar->Todos os Programas->Inicializar) fique monitorando se tal aplicação de monitoração está no ar.

[quote=thingol]Um serviço não pode executar aplicações em primeiro plano. Isso é inerente ao Windows. Ele pode até ser configurado para "aceitar interação com o desktop" (Propriedades, aba Logon, Fazer Logon como (.) Conta de sistema local [X] Permitir que o serviço interaja com a área de trabalho), mas não pode ele mesmo iniciar uma aplicação em primeiro plano.

É necessário que alguém se logue e inicie a aplicação - você pode pô-la no menu Iniciar -> Todos os Programas -> Inicializar. [/quote]

Obrigado!!! Bastou permitir à conta configurada interagir com a área de trabalho para fazer o serviço invocar a aplicação monitorada quando não está em execução.

Você pode usar JNA [ https://jna.dev.java.net/ ]
para chamar a API: [ http://msdn.microsoft.com/en-us/library/ms682425.aspx ] (CreateProcess).

Abraços e boa sorte.