Windows não reinicia com o programa rodando
Eae pessoal,
Tenho um aplicativo de backup desenvolvido em Delphi.
Ao iniciar ele vai para a area de notificação e em determinada hora ele executa o backup dos dados do computador (utiliza um Timer para verificar se está na hora).
Detalhe: O sistema operacional não reinicia, não efetua logoff, não desliga se o programa estiver rodando, mesmo que não esteja executando a operação.
O windows somente reinicia se forçar com CONTROL ou fechar o programa antes.
Alguma sugestão?
Tenho um aplicativo de backup desenvolvido em Delphi.
Ao iniciar ele vai para a area de notificação e em determinada hora ele executa o backup dos dados do computador (utiliza um Timer para verificar se está na hora).
Detalhe: O sistema operacional não reinicia, não efetua logoff, não desliga se o programa estiver rodando, mesmo que não esteja executando a operação.
O windows somente reinicia se forçar com CONTROL ou fechar o programa antes.
Alguma sugestão?
Netosdr
Curtidas 0
Respostas
Delphi32
14/09/2006
Bem, tem uma pergunta básica que você não respondeu acima:
Seu programa faz alguma interceptação da Mensagem do windows que ´avisa´ aos programas que ele está sendo desligado/reiniciado?
t+!
Seu programa faz alguma interceptação da Mensagem do windows que ´avisa´ aos programas que ele está sendo desligado/reiniciado?
t+!
GOSTEI 0
Netosdr
14/09/2006
Caro colega,
Não tem nada no programa que ´avisa´ ao sistema operacional que o programa foi encerrado, nem nada do gênero.
É um aplicativo muito básico:
- Ao iniciar ele vai para a área de notificação
- Tem um timer que verifica se está na hora (if Time = vTime then..)
- Se for na hora, desabilita o timer
- Executa a operação (simples Winexec)
- Habilita o Timer novamente.
Basicamente isso..
Não tem nada no programa que ´avisa´ ao sistema operacional que o programa foi encerrado, nem nada do gênero.
É um aplicativo muito básico:
- Ao iniciar ele vai para a área de notificação
- Tem um timer que verifica se está na hora (if Time = vTime then..)
- Se for na hora, desabilita o timer
- Executa a operação (simples Winexec)
- Habilita o Timer novamente.
Basicamente isso..
GOSTEI 0
Rodc
14/09/2006
Já tive este problema quando usava um TNMSMTP, da palheta FastNet. Para resolver o problema tive de criar o componente dinamicamente na hora de enviar o e-mail.
Você pode também interceptar a mensagem de desligar do Windows e mandar fechar o seu sistema.
Você pode também interceptar a mensagem de desligar do Windows e mandar fechar o seu sistema.
GOSTEI 0
Netosdr
14/09/2006
Já tive este problema quando usava um TNMSMTP, da palheta FastNet. Para resolver o problema tive de criar o componente dinamicamente na hora de enviar o e-mail.
Você pode também interceptar a mensagem de desligar do Windows e mandar fechar o seu sistema.
Como fazer isso amigo?
GOSTEI 0
Rodc
14/09/2006
Como fazer isso amigo?
Isto oquê? Criar o TNMSMTP dinamicamente ou pegar a mensagem do Windows?
GOSTEI 0
Netosdr
14/09/2006
Pegar a mensagem de desligamento, logoff, reinicar do windows.
GOSTEI 0
Rodc
14/09/2006
Segue um exemplo:
protected procedure WMQueryEndSession(var Msg : TWMQueryEndSession); message WM_QueryEndSession; ...... procedure TForm1.WMQueryEndSession(var Msg : TWMQueryEndSession); begin Close(); end;
GOSTEI 0
Rodc
14/09/2006
Ou melhor, para ficar mais lógico, use a mensagem WM_ENDSESSION. A mensagem WM_QUERYENDSESSION é para você definir se o windows pode ou não fechar.
protected procedure WMQuerySession(var Msg : TWMEndSession); message WM_EndSession; ...... procedure TForm1.WMEndSession(var Msg : TWMEndSession); begin Close(); end;
GOSTEI 0
Netosdr
14/09/2006
Beleza funcionou mas tem um detalhe:
- Se eu usar Close continua sem nenhuma ação, os outros programas sao encerrados, o meu aplicativo continua impedindo;
- Se eu usar Application.Terminate o aplicativo termina quando mando reiniciar, mas não reinicia, aí tenho que entrar em reiniciar de novo, aí sim funciona.
Obs: o aplicativo tem 01 form e 01 datamodule.
- Se eu usar Close continua sem nenhuma ação, os outros programas sao encerrados, o meu aplicativo continua impedindo;
- Se eu usar Application.Terminate o aplicativo termina quando mando reiniciar, mas não reinicia, aí tenho que entrar em reiniciar de novo, aí sim funciona.
Obs: o aplicativo tem 01 form e 01 datamodule.
GOSTEI 0
Rodc
14/09/2006
Tenta usar o QueryEndSession então... é apenas um chute...
GOSTEI 0
Delphi32
14/09/2006
ou... se você estiver usando o componente que rodc falou, tente criá-lo dinamicamente... pode haver um bug nesse componente...
caso você não use esse componente, faça testes para descobrir quem é que está impedindo o windows de desligar.
exemplo: remova o timer do projeto, compile, execute e veja se reinicia... vai fazendo assim até descobrir quem é... depois que descobrir quem é fica mais fácil de resolver...
t+!
caso você não use esse componente, faça testes para descobrir quem é que está impedindo o windows de desligar.
exemplo: remova o timer do projeto, compile, execute e veja se reinicia... vai fazendo assim até descobrir quem é... depois que descobrir quem é fica mais fácil de resolver...
t+!
GOSTEI 0
Rodc
14/09/2006
caso você não use esse componente, faça testes para descobrir quem é que está impedindo o windows de desligar.
É verdade, foi bem assim que eu descobri o erro!!! Fui removendo componentes, units, rotinas, até encontrar o que causava o erro.
GOSTEI 0
Netosdr
14/09/2006
Não estava lembrando, tenho um componente TNmFTP no meu Form, ele que estava dando pau (segui o conselho de ir removendo item por item).
Acho que esses componentes desse fabricante dão um pouco de canseira como o colega mencionou.
Tirei ele, criei em tempo de execução e problema resolvido.
Obrigado a todos pela atenção!
Acho que esses componentes desse fabricante dão um pouco de canseira como o colega mencionou.
Tirei ele, criei em tempo de execução e problema resolvido.
Obrigado a todos pela atenção!
GOSTEI 0