Detectar se o sistema estah em uso
Moderador: Moderadores
-
marcos.gurupi
- Usuário Nível 4

- Mensagens: 939
- Registrado em: 06 Jul 2004 11:53
- Localização: Gurupi-TO
Detectar se o sistema estah em uso
Caros, eh possivel em xhb saber se o sistema estah sendo usado? Preciso dessa informacao para q quando nao estiver sendo usado e houver uma atualizacao pronta um sistema em sytray derrume o sistema para ser atualizado. Obrigado.
Marcos Roberto
NetService Software
NetService Software
Detectar se o sistema estah em uso
Uma idéia é usar MUTEX. Buscando no fórum é possível encontrar um tópico que parece explicar bem o uso deste recurso. Clique aqui.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
-
marcos.gurupi
- Usuário Nível 4

- Mensagens: 939
- Registrado em: 06 Jul 2004 11:53
- Localização: Gurupi-TO
Detectar se o sistema estah em uso
O createMutex eu uso no meu sistema, mas apenas para saber se ele estah aberto, eu preciso de saber se o sistema estah sendo usado em execucao, ou seja, se o usuario estah usando de fato usando o sistema ou se ele estah apenas aberto, pq imagina se o usuario estiver criando um relatorio ou incluindo um cliente/produto e derrepente o sistema eh derrubado. Entaum eu preciso nao apenas se o sistema estah aberto mas em uso. Obrigado pela dica Maligno.
Marcos Roberto
NetService Software
NetService Software
-
MARINI
- Usuário Nível 3

- Mensagens: 288
- Registrado em: 06 Jul 2004 08:06
- Localização: Pindamonhangaba SP
Detectar se o sistema estah em uso
Marcos, com Xailer uso assim, acho que se você adaptar vai te resolver:
Abraços.
Mário
Código: Selecionar todos
FUNCTION IsExeRunning(tcName, tlTerminate)
LOCAL loLocator, loWMI, loProcesses, loProcess, llIsRunning:=.F.
tlTerminate:=IF(tlTerminate=NIL,.F.,tlTerminate)
TRY
loLocator := CREATEOBJECT('WBEMScripting.SWBEMLocator')
loWMI := loLocator:ConnectServer()
loWMI:Security_:ImpersonationLevel = 3 && Impersonate
loProcesses := loWMI:ExecQuery([SELECT * FROM Win32_Process WHERE Name = '] + tcName + ['])
llIsRunning := .F.
IF loProcesses:Count > 0
FOR EACH loProcess in loProcesses
llIsRunning := .T.
IF tlTerminate
loProcess:Terminate(0)
ENDIF
NEXT
ENDIF
CATCH
RETURN .F.
END
RETURN llIsRunning
Mário
Sds
Marini
Marini
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7929
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Detectar se o sistema estah em uso
Lembrei lá dos tempos do SCO UNIX e Novell...
Shutdown mandando a msg para as estações...
Saudações,
Itamar M. Lins Jr.
Shutdown mandando a msg para as estações...
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Detectar se o sistema estah em uso
O sistema em si não sei se vai conseguir, a não ser que crie um TIMER para ficar registrando isso em uma determinada tabela sua ou arquivo.
Outra opção é pegar a inatividade do Windows usando GETINPUTSTATE()
Ou pelos processos do Windows se está mudando o consumo de memoria ou CPU, sei lá...da para brincar com isso.
Outra opção é pegar a inatividade do Windows usando GETINPUTSTATE()
Ou pelos processos do Windows se está mudando o consumo de memoria ou CPU, sei lá...da para brincar com isso.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Detectar se o sistema estah em uso
Amiguinhos,
A idéia de derrubar aplicativo alheio não é boa prática. Pois voce teria de definir dentro do seu sistema, quando uma operação é critica que não permite o desligamento e nunca irá saber quando o usuário entrou numa operação critica, mas antes de sair foi ao banheiro ou está ao telefone anotando pedido ou conversando com a namorada num chat.
O melhor é que voce faça o seguinte:
- Crie um executor padrão, ou seja, sistema.exe
- Faça o executor verificar um arquivo texto contendo a versão de build.
- A operação de verificação, fará o alerta ao usuário de que precisa atualizar pois nova versão está liberada.
- O executor sempre será o aplicativo do atalho, mas ele executará o build de numero XXX gravado no arquivo texto.
Conteúdo de um build.txt:
O seu executor, ficando em tray poderá ter as opções, abrir, fechar, minimizar, atualizar, onde:
Abrir - irá executar o build trazendo-o para a memória.
Fechar - irá fechar o build mantendo o executor ativo.
Minimizar - irá esconder o build de vista.
Atualizar - baixar da internet um build que ainda não exista na maquina do cliente.
Como criar o seu build.txt?
Toda vez que compilar o seu sistema incremente e grave o número no arquivo .txt. Distribua-o com o sistema.exe, sendo que os arquivos que deverão existir são:
sistema.exe
sistema.XXXX.exe
build.txt
A idéia de derrubar aplicativo alheio não é boa prática. Pois voce teria de definir dentro do seu sistema, quando uma operação é critica que não permite o desligamento e nunca irá saber quando o usuário entrou numa operação critica, mas antes de sair foi ao banheiro ou está ao telefone anotando pedido ou conversando com a namorada num chat.
O melhor é que voce faça o seguinte:
- Crie um executor padrão, ou seja, sistema.exe
- Faça o executor verificar um arquivo texto contendo a versão de build.
- A operação de verificação, fará o alerta ao usuário de que precisa atualizar pois nova versão está liberada.
- O executor sempre será o aplicativo do atalho, mas ele executará o build de numero XXX gravado no arquivo texto.
Código: Selecionar todos
...
cBuild := MemoRead( "build.txt" )
...
RUN( "sistema." + cBuild + ".exe" )
Código: Selecionar todos
2058
Abrir - irá executar o build trazendo-o para a memória.
Fechar - irá fechar o build mantendo o executor ativo.
Minimizar - irá esconder o build de vista.
Atualizar - baixar da internet um build que ainda não exista na maquina do cliente.
Como criar o seu build.txt?
Toda vez que compilar o seu sistema incremente e grave o número no arquivo .txt. Distribua-o com o sistema.exe, sendo que os arquivos que deverão existir são:
sistema.exe
sistema.XXXX.exe
build.txt
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
-
toya
- Usuário Nível 3

- Mensagens: 157
- Registrado em: 26 Jul 2004 16:51
- Localização: Campo Grande/MS - Brasil
- Contato:
Detectar se o sistema estah em uso
Código: Selecionar todos
function EstaRodandoKillExe( _cExe, _nKill )
/*
* Verificar se um Exe está sendo executado e podendo até derrubá-lo
* Parametros: _cExe, _nKill
* Retorno: Retorno - .t. se estiver rodando
*
* Autor: toya
*/
local Retorno := .f.
local oScriptObj
local oWmiService
local oListaProcess
local oProcessos
DEFAULT _nKill := 0
TRY
oScriptObj := CREATEOBJECT( "wbemScripting.SwbemLocator" )
oWmiService := oScriptObj:ConnectServer()
CATCH
return Retorno
END
TRY
oListaProcess := oWmiService:ExecQuery( "select * from Win32_Process where Name='" + _cExe + "'" )
CATCH
return Retorno
END
for Each oProcessos in oListaProcess
Retorno := .t.
if _nKill == 2
oProcessos:Terminate() // mata o _cEXE
endif
next
return Retorno
Elcio Carlos
(toya)
Ahora en la version 6.5
toyasis@gmail.com (e-mail)
toyaskype (skype)
http://www.toyanet.com.br
https://www.facebook.com/profile.php?id=100009195956044
FWH 11.8+PellesC+xHarbour.org 1.2.1+SqlRDD
Clippeiro por opção, Fivewiner por amor ao Clipper...
2015 - Iniciante/Aprendiz de HMG...
(toya)
Ahora en la version 6.5
toyasis@gmail.com (e-mail)
toyaskype (skype)
http://www.toyanet.com.br
https://www.facebook.com/profile.php?id=100009195956044
FWH 11.8+PellesC+xHarbour.org 1.2.1+SqlRDD
Clippeiro por opção, Fivewiner por amor ao Clipper...
2015 - Iniciante/Aprendiz de HMG...
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Detectar se o sistema estah em uso
Acho que o Marcos está querendo é saber se tem alguma tela do sistema dele está sendo usada ou não, e não simplesmente se está aberto.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Detectar se o sistema estah em uso
Amiguinhos,
Ele precisa saber não se o sistema esta em uso, mas se o usuário esta fazendo algo demorado ou critico.
Sem uma programação mais auditada não tem como. E como seria esta auditoria? uma pequena tabela de log gravaria a posição do usuário e de posse desta tabela saber o que cada usuário faz e derrubar o aplicativo usando os métodos que todos exemplificaram.
O caso que propuz, foi o de não ser necessário nada disto, nenhuma preocupação com o que o usuário está fazendo e sem precisar da ajuda de usuário ao telefone.
Altera o sistema, cria o controle de build e envia os dois arquivos para o cliente.
Inclusive vou colocar em prática, já.
Imaginem-se, programando no cliente ou remotamente, voce faz alterações no sistema e envia ao servidor e na hora de atualizar o executável acontece impedimento de escrita, mas ai voce tem de pedir a um usuario que saia de maquina em maquina fechando o sistema, mas em um terminal alguém esta executando um pedido, algo que demore.Acho que o Marcos está querendo é saber se tem alguma tela do sistema dele está sendo usada ou não, e não simplesmente se está aberto.
Ele precisa saber não se o sistema esta em uso, mas se o usuário esta fazendo algo demorado ou critico.
Sem uma programação mais auditada não tem como. E como seria esta auditoria? uma pequena tabela de log gravaria a posição do usuário e de posse desta tabela saber o que cada usuário faz e derrubar o aplicativo usando os métodos que todos exemplificaram.
O caso que propuz, foi o de não ser necessário nada disto, nenhuma preocupação com o que o usuário está fazendo e sem precisar da ajuda de usuário ao telefone.
Altera o sistema, cria o controle de build e envia os dois arquivos para o cliente.
Inclusive vou colocar em prática, já.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
-
marcos.gurupi
- Usuário Nível 4

- Mensagens: 939
- Registrado em: 06 Jul 2004 11:53
- Localização: Gurupi-TO
Detectar se o sistema estah em uso
Eh o "x" da questao eh saber se o usuario estah usando o sistema , ou ele estah simplesmente aberto sem uso. O exemplo do colega Toya apenas verifica se ele estah aberto. Imagina o usario com um pedido grande aberto e o sistema fecha sem aviso para atualizar? O kra me "demite" por justa causa. 
Marcos Roberto
NetService Software
NetService Software
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Detectar se o sistema estah em uso
Marcos,
Isso não tem jeito, você terá que criar essa rotina dentro do seu sistema para poder saber se está ou não sendo usado.
Isso não tem jeito, você terá que criar essa rotina dentro do seu sistema para poder saber se está ou não sendo usado.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
-
marcos.gurupi
- Usuário Nível 4

- Mensagens: 939
- Registrado em: 06 Jul 2004 11:53
- Localização: Gurupi-TO
Detectar se o sistema estah em uso
Perfeito, para evitar fazer alteracoes no retaguarda e no PDV eu vou perguntar ao usuario se ele quer q seja atualizado <SIM> ou <NAO>, se o usuario escolher sim o proprio sistema derruma o executavel e faz a atualizacao. Obrigado a todos.
Marcos Roberto
NetService Software
NetService Software
Detectar se o sistema estah em uso
Eu ainda prefiro o método de enviar mensagem insistindo que o usuário saia para atualizar o sistema.
Derrubar o sistema pode acarretar problemas de integridade de registros e é uma forma deselegante para esse fim.
Eu ainda envio email para o usuário principal do sistema para sair. Outra forma é agendar a atualização do sistema para determinado horário e informar ao usuário que o sistema deverá ser interrompido neste horário.
As atualizações que eu faço são do tipo "on the fly" ou seja faço um backup da versão atual renomeando o executável atual com data e hora e substituo o executável e informo a cada 60 segundos com timer sobre essa atualização informando o motivo da atualização e peço para sair para efetivar.
O próprio sistema é autoatualizado.
Funciona sem problemas.
Derrubar o sistema pode acarretar problemas de integridade de registros e é uma forma deselegante para esse fim.
Eu ainda envio email para o usuário principal do sistema para sair. Outra forma é agendar a atualização do sistema para determinado horário e informar ao usuário que o sistema deverá ser interrompido neste horário.
As atualizações que eu faço são do tipo "on the fly" ou seja faço um backup da versão atual renomeando o executável atual com data e hora e substituo o executável e informo a cada 60 segundos com timer sobre essa atualização informando o motivo da atualização e peço para sair para efetivar.
O próprio sistema é autoatualizado.
Funciona sem problemas.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Detectar se o sistema estah em uso
Os mais técnicos vão arrepiar, mas eu uso uma solução bem simples, que funciona.
Meu EXE abre um arquivo TXT em modo exclusivo, com FOPEN(ARQUIVO,18). Se alguém mais tentar bloquear o mesmo TXT, não vai conseguir, prova de que o EXE está rodando. Isto, inclusive, elimina a chance do usuário abrir uma segunda instância do EXE.
Se alguém conseguir bloquear (por ex, o atualizador), ele assume o EXE e ninguém mais entra (usuário). É só socar uma mensagem tipo "Sistema em atualização" no TXT.
Nas atualizações do EXE, primeito bloqueio o TXT. Se conseguir, o usuário não entra mais, então consigo atualizar o EXE sem problemas. Funciona 101%. Tem uns detalhes, mas não cabe mencionar, é só cada um adaptar a idéia ao seu sistema.
PS. Tenho um cliente, que atendo via Teamviewer, que abre dezenas de janelas do Outlook 2010, vira uma salada, aí ele me liga pedindo socorro. Se o Outlook criasse um TXT em modo exclusivo, só abriria uma janela... Se bem que é bom que ele me ligue, assim faturo.
PS2. Tem um outro treco bacana, dica do Leonardo Machado, que é criar arquivos HRB. Fantástico. Você atualiza seu sistema sem precisar derrubar o usuário. Tenho um sistema rodando com HRB, nunca deu problemas.
Meu EXE abre um arquivo TXT em modo exclusivo, com FOPEN(ARQUIVO,18). Se alguém mais tentar bloquear o mesmo TXT, não vai conseguir, prova de que o EXE está rodando. Isto, inclusive, elimina a chance do usuário abrir uma segunda instância do EXE.
Se alguém conseguir bloquear (por ex, o atualizador), ele assume o EXE e ninguém mais entra (usuário). É só socar uma mensagem tipo "Sistema em atualização" no TXT.
Nas atualizações do EXE, primeito bloqueio o TXT. Se conseguir, o usuário não entra mais, então consigo atualizar o EXE sem problemas. Funciona 101%. Tem uns detalhes, mas não cabe mencionar, é só cada um adaptar a idéia ao seu sistema.
PS. Tenho um cliente, que atendo via Teamviewer, que abre dezenas de janelas do Outlook 2010, vira uma salada, aí ele me liga pedindo socorro. Se o Outlook criasse um TXT em modo exclusivo, só abriria uma janela... Se bem que é bom que ele me ligue, assim faturo.
PS2. Tem um outro treco bacana, dica do Leonardo Machado, que é criar arquivos HRB. Fantástico. Você atualiza seu sistema sem precisar derrubar o usuário. Tenho um sistema rodando com HRB, nunca deu problemas.

