Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

kartter

Programa como processo

Recommended Posts

Pessoal,

 

Estou precisando crirar um processo em Delphi, de modo que se o usuário fechar a aplicação, o processo restarte a aplicação.

 

Tipo como acontece com o firebird, que tem o ibguard que funciona como um processo, e caso alguém feche o firebird, o próprio ibguard restarta o firebird. Preciso disto, para caso o usuário feche a aplicação, que é um módulo para comunicação onLine, este seja restartado automaticamente.

 

Alguém tem uma idéia de como fazer?

 

Valew!!

Kartter :rolleyes:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá

 

Os serviços do windows são uma boa solução quando você precisa executar alguma tarefa antes do login de qualquer usuário no sistema.

Na empresa onde trabalho atualmente, utilizamos esta tecnologia em um servidor que gerencia o acesso dos usuários ao sistema e contabilização das impressões enviadas por usuários através de um servidor de impressão.

Veja como criar um serviço a partir de uma aplicação pronta. Além disso, também vou descrever alguns detalhes que só a experiência em trabalhar com esta tecnologia pode trazer à tona.

Os exemplos foram criados com base no RAD 2007 e utilizando o Windows XP.

- Criando o serviço

Antes de tudo, é claro, você deve ter uma aplicação normal para transformá-la em um serviço. Com ela aberta no Delphi, vá até o menu File / New / Other e escolha o item Service.

 

Com o serviço criado (eu chamei de srvServidor) você deve fazer as seguintes alterações:

Projeto (dpr): o uses Forms deve ser removido e o SvcMgr adicionado. Além disso, o único objeto que deve ser criado na inicialização é o serviço. Veja:

 

Implementar o método Execute: o serviço possui um método chamado Execute. É nele que você deverá criar a tela principal da sua aplicação. Veja:

 

Não se esqueça de declarar a unit ActiveX na Uses

Ignore por enquanto a inicialização do COM (método CoInitialize) . Ela será explicada mais adiante.

Instalar o serviço: a instalação de um serviço no windows é feita executando a aplicação com o parâmetro /INSTALL. A desinstalação é feita com o /UNINSTALL. Estes comandos deverão ser digitados através do prompt de comandos, onde através da linha de código irá localizar o executável:

Ex: meuexecutavel.exe /install

 

- Adaptando o executável para rodar como um serviço

Existem diversas alterações que você deve fazer para rodar sua aplicação como um serviço. Abaixo segue uma lista das mais comuns.

Objeto TService

A primeira alteração deve ser feita no objeto TService criado anteriormente. Você precisa definir as seguintes propriedades:

• DisplayName: nome que aparecerá na lista de serviços;

• Interactive: define se o serviço poderá se comunicar com o Desktop ou não. Para mostrar um form ou até mesmo uma simples mensagem (ShowMessage, por exemplo), esta propriedade deve estar definida como true.

Inicialização do COM

Se a sua aplicação utiliza algum objeto COM, você deverá inicializar o suporte ao COM com o método CoInitialize. Isto pode ser visto no método Execute apresentado acima.

Sem esta alteração, provavelmente você receberá uma mensagem do tipo “CoInitialize has not been called” ao rodar o serviço.

Método GetCurrentDir

O método GetCurrentDir quando utilizado em um serviço retorna sempre c:\windows\System32. Eu não achei em lugar algum documentação que explicasse este comportamento.

Para contornar este problema, utilizei o ParamStr(0) juntamente com ExtractFilePath.

OnMouseLeave

Se você utiliza este evento em Labels (talvez em outros componentes também), terá que esquecê-lo. Em todos os testes que fiz o OnMouseLeave não foi executado. Logo, deixei de usá-lo.

FormStyle

O form principal de uma aplicação normalmente é do tipo fsMDIForm. Em um serviço você deverá alterar esta propriedade para fsNormal.

Nos testes que fiz, ao utilizar o tipo fsMDIForm não foi possível modificar a propriedade Visible de alguns frames.

 

Bom, acho que este texto vai lhe ajudar a resolver os problemas... qualquer coisa, post ai.

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

 

Olá

 

Os serviços do windows são uma boa solução quando você precisa executar alguma tarefa antes do login de qualquer usuário no sistema.

Na empresa onde trabalho atualmente, utilizamos esta tecnologia em um servidor que gerencia o acesso dos usuários ao sistema e contabilização das impressões enviadas por usuários através de um servidor de impressão.

Veja como criar um serviço a partir de uma aplicação pronta. Além disso, também vou descrever alguns detalhes que só a experiência em trabalhar com esta tecnologia pode trazer à tona.

Os exemplos foram criados com base no RAD 2007 e utilizando o Windows XP.

- Criando o serviço

Antes de tudo, é claro, você deve ter uma aplicação normal para transformá-la em um serviço. Com ela aberta no Delphi, vá até o menu File / New / Other e escolha o item Service.

 

Com o serviço criado (eu chamei de srvServidor) você deve fazer as seguintes alterações:

Projeto (dpr): o uses Forms deve ser removido e o SvcMgr adicionado. Além disso, o único objeto que deve ser criado na inicialização é o serviço. Veja:

 

Implementar o método Execute: o serviço possui um método chamado Execute. É nele que você deverá criar a tela principal da sua aplicação. Veja:

 

Não se esqueça de declarar a unit ActiveX na Uses

Ignore por enquanto a inicialização do COM (método CoInitialize) . Ela será explicada mais adiante.

Instalar o serviço: a instalação de um serviço no windows é feita executando a aplicação com o parâmetro /INSTALL. A desinstalação é feita com o /UNINSTALL. Estes comandos deverão ser digitados através do prompt de comandos, onde através da linha de código irá localizar o executável:

Ex: meuexecutavel.exe /install

 

- Adaptando o executável para rodar como um serviço

Existem diversas alterações que você deve fazer para rodar sua aplicação como um serviço. Abaixo segue uma lista das mais comuns.

Objeto TService

A primeira alteração deve ser feita no objeto TService criado anteriormente. Você precisa definir as seguintes propriedades:

• DisplayName: nome que aparecerá na lista de serviços;

• Interactive: define se o serviço poderá se comunicar com o Desktop ou não. Para mostrar um form ou até mesmo uma simples mensagem (ShowMessage, por exemplo), esta propriedade deve estar definida como true.

Inicialização do COM

Se a sua aplicação utiliza algum objeto COM, você deverá inicializar o suporte ao COM com o método CoInitialize. Isto pode ser visto no método Execute apresentado acima.

Sem esta alteração, provavelmente você receberá uma mensagem do tipo “CoInitialize has not been called” ao rodar o serviço.

Método GetCurrentDir

O método GetCurrentDir quando utilizado em um serviço retorna sempre c:\windows\System32. Eu não achei em lugar algum documentação que explicasse este comportamento.

Para contornar este problema, utilizei o ParamStr(0) juntamente com ExtractFilePath.

OnMouseLeave

Se você utiliza este evento em Labels (talvez em outros componentes também), terá que esquecê-lo. Em todos os testes que fiz o OnMouseLeave não foi executado. Logo, deixei de usá-lo.

FormStyle

O form principal de uma aplicação normalmente é do tipo fsMDIForm. Em um serviço você deverá alterar esta propriedade para fsNormal.

Nos testes que fiz, ao utilizar o tipo fsMDIForm não foi possível modificar a propriedade Visible de alguns frames.

 

Bom, acho que este texto vai lhe ajudar a resolver os problemas... qualquer coisa, post ai.

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

 

Olá

 

Os serviços do windows são uma boa solução quando você precisa executar alguma tarefa antes do login de qualquer usuário no sistema.

Na empresa onde trabalho atualmente, utilizamos esta tecnologia em um servidor que gerencia o acesso dos usuários ao sistema e contabilização das impressões enviadas por usuários através de um servidor de impressão.

Veja como criar um serviço a partir de uma aplicação pronta. Além disso, também vou descrever alguns detalhes que só a experiência em trabalhar com esta tecnologia pode trazer à tona.

Os exemplos foram criados com base no RAD 2007 e utilizando o Windows XP.

- Criando o serviço

Antes de tudo, é claro, você deve ter uma aplicação normal para transformá-la em um serviço. Com ela aberta no Delphi, vá até o menu File / New / Other e escolha o item Service.

 

Com o serviço criado (eu chamei de srvServidor) você deve fazer as seguintes alterações:

Projeto (dpr): o uses Forms deve ser removido e o SvcMgr adicionado. Além disso, o único objeto que deve ser criado na inicialização é o serviço. Veja:

 

Implementar o método Execute: o serviço possui um método chamado Execute. É nele que você deverá criar a tela principal da sua aplicação. Veja:

 

Não se esqueça de declarar a unit ActiveX na Uses

Ignore por enquanto a inicialização do COM (método CoInitialize) . Ela será explicada mais adiante.

Instalar o serviço: a instalação de um serviço no windows é feita executando a aplicação com o parâmetro /INSTALL. A desinstalação é feita com o /UNINSTALL. Estes comandos deverão ser digitados através do prompt de comandos, onde através da linha de código irá localizar o executável:

Ex: meuexecutavel.exe /install

 

- Adaptando o executável para rodar como um serviço

Existem diversas alterações que você deve fazer para rodar sua aplicação como um serviço. Abaixo segue uma lista das mais comuns.

Objeto TService

A primeira alteração deve ser feita no objeto TService criado anteriormente. Você precisa definir as seguintes propriedades:

• DisplayName: nome que aparecerá na lista de serviços;

• Interactive: define se o serviço poderá se comunicar com o Desktop ou não. Para mostrar um form ou até mesmo uma simples mensagem (ShowMessage, por exemplo), esta propriedade deve estar definida como true.

Inicialização do COM

Se a sua aplicação utiliza algum objeto COM, você deverá inicializar o suporte ao COM com o método CoInitialize. Isto pode ser visto no método Execute apresentado acima.

Sem esta alteração, provavelmente você receberá uma mensagem do tipo “CoInitialize has not been called” ao rodar o serviço.

Método GetCurrentDir

O método GetCurrentDir quando utilizado em um serviço retorna sempre c:\windows\System32. Eu não achei em lugar algum documentação que explicasse este comportamento.

Para contornar este problema, utilizei o ParamStr(0) juntamente com ExtractFilePath.

OnMouseLeave

Se você utiliza este evento em Labels (talvez em outros componentes também), terá que esquecê-lo. Em todos os testes que fiz o OnMouseLeave não foi executado. Logo, deixei de usá-lo.

FormStyle

O form principal de uma aplicação normalmente é do tipo fsMDIForm. Em um serviço você deverá alterar esta propriedade para fsNormal.

Nos testes que fiz, ao utilizar o tipo fsMDIForm não foi possível modificar a propriedade Visible de alguns frames.

 

Bom, acho que este texto vai lhe ajudar a resolver os problemas... qualquer coisa, post ai.

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.