Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Serviço do Windows com Form


Gustavo_Sid

Pergunta

Olá galera.

Estou com um problema quando estou tentando criar um serviço em delphi para o windows.

Acontece que o serviço já consegui fazer rodar, o problema é que presico de um form na aplicação, pois vou usar um banco de dados ACCESS para quardar as configurações que serviço precisa.

O que está ocorrendo é o seguinte:

Quando inicio o serviço criado abre o form normalmente, mais os Edits que preciso para digitar os parametros do serviço ficam travados e não deixa digitar. Aí pensei que era porque o form estava sendo criado a cada vez que o serviço rodava. Aí resolvi colocar em outro form que fica idenpendente do serviço, mais na mesma aplicação e mesmo assim os Edits ficaram travados também..

alguém sabe o que pode ser ?? E como resolvo isso??

Abraços.

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

veja esse link

http://www.devmedia.com.br/articles/viewcomp.asp?comp=7867

Quando inicio o serviço criado abre o form normalmente, mais os Edits que preciso para digitar os parametros do serviço ficam travados e não deixa digitar

lendo esse artigo, voce vai entender o motivo porque os Edits ficam travados ...

para solucionar o problema voce devera parar o serviço e passar os paramentros necessarios e depois inicia-lo novamente

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
veja esse link

http://www.devmedia.com.br/articles/viewcomp.asp?comp=7867

Quando inicio o serviço criado abre o form normalmente, mais os Edits que preciso para digitar os parametros do serviço ficam travados e não deixa digitar

lendo esse artigo, voce vai entender o motivo porque os Edits ficam travados ...

para solucionar o problema voce devera parar o serviço e passar os paramentros necessarios e depois inicia-lo novamente

abraço

Éh agora entendi. acontece que na minha aplicação quando paro o serviço o form é destruido dessa forma não vai ter jeito de passar os parametros, mas já resolvi esse problema. Crei um outro executavel para passar os parametros, assim so paro o serviço e chamo esse outro executál e depois incio o serviço novamente, dessa forma deu tudo certo. Mais muito obrigado.

So tenho outra duvida, por ser um serviço não estou conseguindo colocar um título na aplicação para aparecer na barra de tarefas, uso o codigo abaixo e não funciona. Sabe o porque e se tem como resolver ???

program svrMVEpdverp;

uses

SvcMgr,

untServico in 'untServico.pas' {SID_MVEERP: TService};

{$R *.res}

begin

Application.Initialize;

Application.Title:= 'Integração PDV ERP'; //Aki coloco o titulo mais quando rodo aparece o nome do executavel.

Application.CreateForm(TSID_MVEERP, SID_MVEERP);

Application.Run;

end.

Obrigado.

Abraços;

Link para o comentário
Compartilhar em outros sites

  • 0
Application.Title:= 'Integração PDV ERP'; //Aki coloco o titulo mais quando rodo aparece o nome do executavel.

voce não reparou ainda que é justamente o nome do executável que aparece no gerenciador de tarefas ?

se voce quiser o titulo 'Integração PDV ERP', esse é que deverá ser o nome do seu executável

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Application.Title:= 'Integração PDV ERP'; //Aki coloco o titulo mais quando rodo aparece o nome do executavel.

voce não reparou ainda que é justamente o nome do executável que aparece no gerenciador de tarefas ?

se voce quiser o titulo 'Integração PDV ERP', esse é que deverá ser o nome do seu executável

abraço

Sim é o nome do executavel que fica no gerenciador de tarefas. Mais o que eu quero é que o executável tenha um nome e quando abrir ele a aba do programa na barra de tarefas fica o texto definido no "Application.Title", isso sempre funciona para qualquer aplicação so que nessa não ta funcionando ta ficando o nome do executável, acho que talvez seja porque é um aplicação de serviço.

Entendeu ?? Será que não tem outra forma para fazer isso numa aplicação de serviço??

Abraços..

Link para o comentário
Compartilhar em outros sites

  • 0

Leia este comentario

Serviços do Windows têm um nome interno usado pelo sistema operacional como identificador único e um nome externo usado como uma descrição a ser apresentada ao usuário. Tanto o C++ Builder quanto o Delphi usam como nome interno do Serviço o valor da propriedade Name do componente TService. Por isso, é preciso modificar esse valor antes do programa ter a oportunidade de registrar o Serviço ou realizar qualquer outra operação que dependa do nome. Um bom lugar é o próprio construtor do TService.

Uma implicação importante ao se usar esse método é que alterar o nome de um componente nos força a respeitar as regras de nomeação do ambiente. Ou seja, o nome não pode ser iniciado por um número, não pode apresentar espaços em branco nem caracteres que não existam na língua inglesa, como caracteres acentuados (agudo, circunflexo, til, trema, crase) ou o cê cidilha.

Podemos usar o próprio nome da configuração obtido anteriormente para diferenciar cada instância instalada. Para que isso funcione, teremos que preparar o nome obtido para garantir sua validade, substituindo os caracateres que não forem permitidos.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Leia este comentario

Serviços do Windows têm um nome interno usado pelo sistema operacional como identificador único e um nome externo usado como uma descrição a ser apresentada ao usuário. Tanto o C++ Builder quanto o Delphi usam como nome interno do Serviço o valor da propriedade Name do componente TService. Por isso, é preciso modificar esse valor antes do programa ter a oportunidade de registrar o Serviço ou realizar qualquer outra operação que dependa do nome. Um bom lugar é o próprio construtor do TService.

Uma implicação importante ao se usar esse método é que alterar o nome de um componente nos força a respeitar as regras de nomeação do ambiente. Ou seja, o nome não pode ser iniciado por um número, não pode apresentar espaços em branco nem caracteres que não existam na língua inglesa, como caracteres acentuados (agudo, circunflexo, til, trema, crase) ou o cê cidilha.

Podemos usar o próprio nome da configuração obtido anteriormente para diferenciar cada instância instalada. Para que isso funcione, teremos que preparar o nome obtido para garantir sua validade, substituindo os caracateres que não forem permitidos.

abraço

OK. Entendi realmente so vai dar se trocar o nome do executável. Muito obigado pela ajuda irei fazer isso.

Abraços..

Link para o comentário
Compartilhar em outros sites

  • 0

Seguinte Galera para não Criar outro Tópico vou aproveitar esse mesmo para outro problema desse mesmo programa.

O problema é o seguinte:

Tenho um serviço e um forma na aplicação.. acontece que o serviço so utilizo mesmo para colocar como serviço do windows é no form que tenho um TTimer para rodar as tarefas...

O problema é o seguinte de alguma forma o timer está sendo entorrompido por alguma razão e estou achando que seja o serviço, como foi minha primeira aplicação utilizando serviço não sei muito bem como funciona.

Enfim gostario de saber se o serviço fica executando de tempo em tempo porque crio o meu form nele e isso pode ta atrapalahando..

o Codigo é o seguinte:

procedure TSID_MVEERP.ServiceExecute(Sender: TService);

begin

try

CoInitialize(Nil);

try

Application.CreateForm(TfrmPrincipal, frmPrincipal);

frmPrincipal.Show;

except

on E: Exception do

ShowMessage('Erro: '+ E.Message);

end;

While (not(Self.Terminated)) do

ServiceThread.ProcessRequests(true);

finally

CoUninitialize;

end;

end;

Quero saber se isso é executado constantemente enquanto o serviço está rodando porque isso pode estar parando o Timer que tem nesse Form ??? E se for como faço para que ele fique sempre rodando mais sem criar esse form a todo momento, tentei colocar no on start do serviço mais aí está dando erro so consegui dessa forma...

Abraços..

Link para o comentário
Compartilhar em outros sites

  • 0

voce já reparou no Gerenciador de Tarefas do Windows ???

voce verá que existem varios programas carregados na memória, podem não estar executando nada ...

exemplo disso é um programa em delphi para efetuar calculos ... quando é clicado no botão para efeturar esses calculos, o uso da memória sobe ( veja CPU, Uso de Memória e Priopridade Basica no gerenciador de tarefas do windows )

ao finalizar os calculos, a CPU vai a 0, o uso de memoria vai estar em tantos K e a prioridade basica vai estar Normal

apesar de estar ativo na memoria, não esta executando nada

para entender melhor isso, veja essa apostila

http://www.cpdee.ufmg.br/~seixas/PaginaATR...Performance.pdf

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...