Acessando o aplicativo desktop a partir de um serviço

Traduções deste artigo Traduções deste artigo
ID do artigo: 115825 - Exibir os produtos aos quais esse artigo se aplica.
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Expandir tudo | Recolher tudo

Sumário

No Windows NT, versão 3.1, se você quiser um serviço para ter acesso a área de trabalho do aplicativo, você deve executar o serviço na conta LocalSystem. Um processo de serviço em execução na conta LocalSystem (ou um processo iniciado a partir de um serviço) pode exibir caixas de mensagem, janelas e caixas de diálogo. Processos que estão sendo executados na conta LocalSystem não são encerrados pelo sistema durante o logoff. Um número de alterações foram feito para o Windows NT, versão 3.5, que afetam o maneira como o Windows NT interage com esses serviços. Além disso, Windows NT 3.51 possui um conjunto mais rico de APIs da área de trabalho.

Observação: Executar serviços interativos na conta do sistema é um muito prática perigosa. Isso é especialmente verdadeiro do processador de comandos e arquivos em lotes. Um usuário que deseja controlar o sistema apenas pode pressione CTRL+C para obter um prompt de comando interativo do sistema.

Mais Informações

Novos recursos do Windows NT versão 3.5, que afetam os serviços são:
  • A conta do usuário conectado no é a única conta acesso concedida a área de trabalho do aplicativo. O sistema local não tem acesso. Portanto, é possível obter acesso à área de trabalho por representar o usuário antes de fazer qualquer usuário ou GDI chama.
  • Aplicativos de console e GUI iniciados a partir um processo de serviço durante uma sessão de logon específica são executados em uma estação de janela invisível e a área de trabalho que são exclusivas a sessão. A estação de janela e a área de trabalho são criados automaticamente quando o aplicativo primeiro na sessão é iniciado; eles são destruídos quando o último aplicativo sai. Não é possível para tornar essas áreas de trabalho invisíveis visível.
  • Se desejar que um serviço na conta localsystem para interagir com o usuário conectado, especifique o sinalizador SERVICE_INTERACTIVE_PROCESS na chamada para CreateService(). Por exemplo:
          schService = CreateService(
             schSCManager,
             serviceName,
             serviceName,
             SERVICE_ALL_ACCESS,
             SERVICE_INTERACTIVE_PROCESS | SERVICE_WIN32_OWN_PROCESS,
             SERVICE_DEMAND_START,
             SERVICE_ERROR_NORMAL,
             lpszBinaryPathName,
             NULL,
             NULL,
             NULL,
             NULL,
             NULL );
    						
    se você especificar uma conta diferente de localsystem ao usar SERVICE_INTERACTIVE_PROCESS, você receberá o erro INVALID_PARAMETER (87).
  • Se você usar CreateProcess() para iniciar o processo e você deseja que o serviço Logon de área de trabalho os usuários, atribua o parâmetro lpdesktop da estrutura STARTUPINFO com "WinSta0\\Default".
  • Serviços que precisam simplesmente uma notificação do usuário visível podem fazer isso chamando MessageBox() com o sinalizador MB_SERVICE_NOTIFICATION. Usando o sinalizador MB_DEFAULT_DESKTOP_ONLY funciona bem, mas somente se área de trabalho do usuário está ativa. Se a estação de trabalho está bloqueada ou uma proteção de tela está sendo executado, a chamada falhará.

    Observação: Se você estiver escrevendo código para um aplicativo que pode ser executado como um serviço ou um executável, você não pode usar MB_SERVICE_NOTIFICATION, bem como um hwndOwner não-NULL.
  • Qualquer saída feita para uma janela não é exibida ou disponibilizada para o aplicativo de forma alguma. Tenta ler bits dos resultados de exibição em uma falha.
  • Serviços de GUI não receberá mensagens WM_QUERYENDSESSION/WM_ENDSESSION no logoff e desligamento; em vez disso, eles recebem eventos CTRL_LOGOFF_EVENT e CTRL_SHUTDOWN_EVENT. Esses serviços não são finalizados pelo sistema durante o logoff.

Propriedades

ID do artigo: 115825 - Última revisão: sábado, 1 de março de 2014 - Revisão: 2.1
A informação contida neste artigo aplica-se a:
  • Interface de Programação de Aplicativos do Microsoft Win32 nas seguintes plataformas
    • Microsoft Windows NT 4.0
    • Microsoft Windows NT 3.51 Service Pack 5
Palavras-chave: 
kbnosurvey kbarchive kbmt KB115825 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 115825

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com