Como consultar a conta que criou um serviço do Windows

1

Bom dia,
estou escrevendo o procedimento de instalação de um produto que incorpora um serviço do Windows. Para instalar esse serviço, um wrapper é usado, referindo-se a uma configuração ( java -jar wrapper.jar -i <product>.conf).

Agora parece haver algum link para a conta: quando um serviço do Windows é instalado como Conta1, ele não pode ser iniciado / interrompido pela Conta2.

Então, eu (Conta2) gostaria de interrogar o serviço do Windows e dizer "Se você estiver instalado pela Conta1, será necessário desinstalar e eu mesmo instalarei você".

Agora a pergunta: como posso saber qual conta instalou o serviço Windows mencionado? Eu já tentei:

  • sc query <Service_Name>
  • sc qc <Service_Name>
  • sc qprivs <Service_Name>
  • sc qmanagedaccount <Service_Name>
  • sc quserservice <Service_Name>
  • wmic service <Service_Name> list full

(Veja, estou ficando desesperado :-))

Nenhum dos comandos mencionados forneceu o nome de usuário "Conta1".

Alguém sabe como fazer isto?

Dominique
fonte
Existe uma razão para você não usar uma abordagem de força bruta (sempre remova e adicione novamente)? Você tentou alterar o descritor de segurança? Se não puder ser iniciado ou interrompido por outra conta, é provável que a conta esteja apenas perdendo a permissão para fazê-lo. A conta é capaz de iniciar / parar outros serviços?
Seth
Não bastante uma duplicata, mas ver superuser.com/a/315709/1686
grawity
Meu cliente tem contas diferentes. Usando a primeira conta, ele faz toda a instalação, incluindo a instalação do Serviço Windows. Mais tarde, ele executa uma configuração completa, com base nesse serviço do Windows. Depois (apenas para atualização), ele faz logon como outro usuário e inicia a atualização. Meu procedimento de instalação agora desinstala e reinstala o Serviço Windows, com dois problemas: nome de usuário errado (deve ser o primeiro) e a configuração é perdida. Portanto, eu gostaria de poder instalar um serviço do Windows com um nome de usuário diferente (mas como saber o que temos agora?).
Dominique

Respostas:

0

Como posso saber qual conta instalou um serviço do Windows?

Você pode usar wevtutilpara recuperar essas informações:

Recupere informações sobre logs de eventos e editores. Arquivar logs em um formato independente, Enumerar os logs disponíveis, Instalar e desinstalar manifestos de eventos, executar consultas, Exportar eventos (de um log de eventos, de um arquivo de log ou usando uma consulta estruturada) para um arquivo especificado, Limpar logs de eventos .

O evento que você precisa procurar é o ID do Evento 4697: Um serviço foi instalado no sistema. :

Um novo serviço foi instalado pelo usuário indicado no assunto. O assunto geralmente identifica o sistema local (SYSTEM) para serviços instalados como parte dos componentes nativos do Windows e, portanto, você não pode determinar quem realmente iniciou a instalação.

Sujeito:

A sessão de usuário e logon que executou a ação.

  • ID de segurança: o SID da conta.
  • Nome da conta: o nome do logon da conta.
  • Domínio da conta: o domínio ou - no caso de contas locais - nome do computador.
  • O ID de logon é um número semi-exclusivo (exclusivo entre reinicializações) que identifica a sessão de logon. O ID de logon permite correlacionar para trás com o evento de logon (4624), bem como com outros eventos registrados durante a mesma sessão de logon.

Serviço de informação:

  • Nome do serviço: o nome interno do sistema do novo serviço.Use "sc query" para obter uma referência cruzada dos nomes dos serviços e seus nomes de exibição mais familiares.

O comando a seguir mostrará Account Nameo último serviço criado:

wevtutil query-events System /count:1 /rd:true /format:text /q:"Event[System[(EventID=4697)]]"

Se você criou o serviço usando o sc createcomando, será necessário procurar o ID do Evento: 7045 Origem: gerenciador de controle de serviço e procurar User Name:

wevtutil query-events System /count:1 /rd:true /format:text /q:"Event[System[(EventID=7045)]]"

Exemplo:

> sc create Notepad binpath= c:\windows\system32\Notepad.exe
[SC] CreateService SUCCESS

> wevtutil query-events System /count:1 /rd:true /format:text /q:"Event[System[(EventID=7045)]]"
Event[0]:
  Log Name: System
  Source: Service Control Manager
  Date: 2017-04-07T14:35:32.600
  Event ID: 7045
  Task: N/A
  Level: Information
  Opcode: N/A
  Keyword: Classic
  User: S-1-5-21-1699878757-1063190524-3119395976-1000
  User Name: Hal\DavidPostill
  Computer: Hal
  Description:
A service was installed in the system.

Service Name:  Notepad
Service File Name:  c:\windows\system32\Notepad.exe
Service Type:  user mode service
Service Start Type:  demand start
Service Account:  LocalSystem

Leitura adicional

  • Um índice AZ da linha de comando do Windows CMD - uma excelente referência para todos os itens relacionados à linha de cmd do Windows.
  • sc - Service Control - Crie, inicie, pare, consulte ou exclua qualquer SERVIÇO do Windows.
  • wevtutil - Utilitário de linha de comando para eventos do Windows.
DavidPostill
fonte