Não parar o processo javaw

7 respostas
D

Olá,

Preciso que o usuário não tenha permissão de parar o processo javaw pelo Gerenciador de Tarefas. Temos um aplicativo que controla o tempo de uso na Internet e que só é ativado quando o usuário faz logon. No entanto, se ele parar o processo javaw, o aplicativo também é fechado!
Como resolvo isso?

Obrigada,

Denise

7 Respostas

P

sinceramente acho q java não eh a melhor opção para um aplicativo desse tipo…

algo rodando no servidor, deve resolver seu problema…um proxy derrepente…com algum tipo de agendamento q bloqueie e libere o uso da internet…

D

Acho que não me expressei bem. Já temos servidor proxy com Dansguardian e tudo mais. Só criamos um aplicativo para controlar melhor o tempo de acesso.
Minha dúvida é: independente do tipo de aplicativo, o javaw pode ser fechado a qualquer momento pelo usuário??? Isso não é uma falha do Java???

Obrigada,

Denise

P

falha não, pelo contrario…

aplicativos Java soh rodam com “autorização” do usuário, até para impedir q aplicações “maliciosas” sejam construidas…

com Java5, ja eh possivel acessar mais recursos do SO, porém ainda numa camada bem visivel ao usuário…

detalhe… javaw eh o processo da Virtual Machine…sem ela não roda Java…

D

Então não há nenhuma maneira para impedir que o usuário mate o processo javaw??? Sou expert em Windows Server, porém leiga em java!

Obrigada,

Denise

I

Olha… eu tentaria o seguinte. Faz o teu processo Java (programa) identificar quando ele está sendo morto (o método destroy dele estiver sendo chamado) E reinstancia o mesmo programa como uma Thread Daemon. Na verdade não sei se resolve o teu problema, mas é a alternativa que eu tentaria. Vou tentar fazer uns testes. T+

I

Não consegui muita coisa. Aqui está o código que andei testando.

import java.util.*;
import java.io.*;

public class Daemon extends Thread {
    private int value;

    private Daemon(final int value) {
        this.value = value;
    }

    public void run() {
        try {
            exec();
        } catch (Exception e) { e.printStackTrace(); } finally { restart(); }
        System.out.println("exit...");
    }

    private synchronized void exec() throws Exception {
        final PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));
        out.print(String.valueOf(value));
        out.close();
        wait(1000);
    }

    private void restart() {
        System.out.println("restarting... " + value);
        Daemon.main(new String[]{});
    }

    public static void main(String[] args) {
        Daemon daemon = new Daemon(new Random().nextInt());
        daemon.start();        
    }

}

O problema é justamente identificar que o processo está morto. O finalize não é chamado quando o console é terminado. A Thread Daemon também não fez diferença. Talvez colocar a aplicação como serviço do windows, não sei. T+

J

Se o usuario é apenas usuario mesmo, impeça que ele acesse o gerenciador de tarefas…

Na outra empresa que trabalhei fizemos isso, qdo o usuario apertava ctrl + alt + del aparecia apenas a tela de bloqueio do windows…

espero que ajude…

Criado 13 de dezembro de 2006
Ultima resposta 15 de dez. de 2006
Respostas 7
Participantes 4