Verificar se determinado programa está rodando

3 respostas
A

Olá,

Bem, eu preciso verificar se o Firebird está rodando no Windows. Estou usando a linguagem C e a API do Windows.
Eu até achei o seu pid, que no momento é 2736. Ótimo, eu posso verificar através da função EnumProcesses(). Só que esse pid ele muda, ou seja, não é um valor fixo. Existe alguma forma de verificar se um processo está rodando através do nome do executável, como por exemplo, se o fbserver.exe estiver rodando, então o Firebird está ativo. É claro que isso não é tão seguro, mas é algo temporário. Usando pid eu fiz da seguinte forma:

#include <stdio.h>
#include <windows.h>
#include <psapi.h>


int main(){
    int i, Rodando;
    Rodando = 0;

    DWORD processos[1024]; 
    DWORD pBytesReturned; 
    EnumProcesses(processos, sizeof(processos), &pBytesReturned);
    int retornados = pBytesReturned / sizeof(DWORD);
    for(i=0; i < retornados; i++){
        if(!processos[i] == 0){
            if (processos[i] = 2736)
                Rodando = 1;
            else
                Rodando = 0;
        }
  }
  if (Rodando = 1)
        printf("O Firebird esta rodando!\n");
  else
        printf("O Firebird nao esta rodando!\n");
  return 0;
}

Alguém pode me dar alguma dica? Obrigado.

3 Respostas

A

Ainda não consegui achar uma solução para este problema. Alguém poderia me ajudar, por favor?

V

Você precisa chamar openProcess sobre o PID para obter informação do processo. Veja esse exemplo na msdn que lista todos os processos em execução (inclusive com seu nome):

A

Puxa. Muito obrigado, Vini.

Criado 21 de maio de 2011
Ultima resposta 23 de mai. de 2011
Respostas 3
Participantes 2