Erro 5: Acesso negado ao iniciar o serviço Windows

97

Estou recebendo este erro quando tento iniciar um serviço do Windows que criei em C #:

texto alternativo

Meu código até agora:

private ServiceHost host = null;

public RightAccessHost()
{
    InitializeComponent();
}

protected override void OnStart(string[] args)
{
    host = new ServiceHost(typeof(RightAccessWcf));
    host.Open();
}

protected override void OnStop()
{
    if (host != null)
        host.Close();
    host = null;
}

Atualização # 1

Resolvi o problema acima concedendo permissões para a conta SERVIÇO DE REDE, mas agora tenho outro problema:

texto alternativo

Atualização # 2

O serviço não pode ser iniciado. System.InvalidOperationException: o serviço 'RightAccessManagementWcf.RightAccessWcf' não tem nenhum ponto de extremidade de aplicativo (sem infraestrutura). Isso pode ser porque nenhum arquivo de configuração foi localizado para seu aplicativo, ou porque nenhum elemento de serviço correspondente ao nome do serviço pôde ser localizado no arquivo de configuração, ou porque nenhum terminal foi definido no elemento de serviço. em System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreNonMexEndpoints (descrição de ServiceDescription) em System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost (descrição de ServiceDescription, ServiceHostBase serviceHost) em System.ServiceModelize.ServiceHostice.Nodel TimeSpan timeout) em System.ServiceModel.Channels.CommunicationObject.

Kris-I
fonte
2
Seu segundo problema não é fácil de resolver apenas com essa mensagem. Você precisará examinar seus logs de eventos e ver qual é o erro real.
Matt Ellen
1
Verifique se a conta do Sistema tem acesso à pasta.
Desenvolvedor

Respostas:

116

Sei que esta postagem é antiga, mas não há uma solução marcada e só queria contar como resolvi isso.

O primeiro Error 5: Access Deniederro foi resolvido concedendo permissões para o diretório de saída da NETWORK SERVICEconta.

O segundo Started and then stoppederro parece ser uma mensagem genérica quando algo falhava no serviço. Verifique o Visualizador de eventos (especificamente 'Logs do Windows> Aplicativo') para ver a mensagem de erro real.

No meu caso, era uma configuração de serviço ruim em app.config.

Justin Skiles
fonte
7
Modifiquei as permissões navegando até a pasta usando o Explorer, clicando com o botão direito do mouse em Propriedades, Segurança e atribuindo as permissões corretas à conta SERVIÇO DE REDE na lista de nomes de usuário.
Justin Skiles
No meu caso sobre o "Erro 5", foi o Serviço de Rede não ter direitos de acesso à pasta do executável. Uma vez que é para desenvolvimento, eu não queria colocar os arquivos na pasta Arquivo de Programa, mas em uma pasta compartilhada que poderia copiar arquivos da máquina de desenvolvimento. Conceder ao Serviço de Rede os direitos Ler / Executar / Listar deve ser suficiente.
ZZZ
5
Eu adiciono LOCAL SERVICE "e" NETWORK SERVICE "à minha pasta bin \ Debug e funciona, obrigado!
Hernaldo Gonzalez
3
Apenas uma observação para as pessoas: se a alteração das permissões não resolver o seu problema, certifique-se de verificar se há erros no Visualizador de Eventos. Eu tive um erro de SQL completamente não relacionado que impediu o serviço de iniciar, mas ainda me deu o "Erro 5: Acesso negado." erro.
dtryan
Obrigado pela nota sobre "Visualizador de eventos" - o mesmo comigo, erro não relacionado "Endpoint não encontrado", mas mascarado como "Acesso negado (5)"
David Votrubec
26

Computador -> Gerenciar -> Serviço -> propriedades [seu serviço]. Em seguida, a guia com as informações da conta. Brinque com essas configurações, como executar o serviço com conta de administrador ou algo assim.

Isso fez tudo para mim.

EDIT: O que também pode ser o problema é que, a maioria dos serviços são executados como LOCAL SERVICEou LOCAL SYSTEMcontas. Agora, quando você executa C:/my-admin-dir/service.execom essas contas, mas elas não têm permissão para executar nada nesse diretório, você obterá error 5. Portanto, localize o executável do serviço, RMB do diretório -> Propriedades -> Segurança e certifique-se de que a conta com a qual o serviço é executado está na lista de usuários que podem ter controle total sobre o diretório.

Mike de Klerk
fonte
21

Isso funcionou para mim.

  1. Clique com o botão direito na pasta de nível superior que contém o executável do serviço. Vá para Propriedades
  2. Vá para a guia "Segurança"
  3. Clique em "EDITAR"
  4. Clique em "ADICIONAR"
  5. Digite o nome "SISTEMA", clique em OK
  6. Destaque o usuário do SISTEMA e clique na caixa de seleção PERMITIR ao lado de "Controle total"
  7. Clique em OK duas vezes
cmcginty
fonte
11
"SYSTEM" não funcionou para mim, eu apenas joguei e tentei "SERVICE" - isso funcionou.
Exter
4
Adicionar "SERVIÇO" e dar a ele "Controle Total" funcionou para mim - Windows 10.
Fredrik
Como a propriedade Account do meu ServiceProcessInstaller (em meu ProjectInstaller) foi definida como LocalService, conceda permissões completas à conta do Serviço Local e isso funcionou!
Dave de
14

Também recebi o mesmo erro, resolvido clicando com o botão direito do mouse em Serviço> Propriedades> Fazer logon> fazer logon como: Conta do sistema local.

Asmita Chavan
fonte
Obrigado. Tive um problema com tor.exe --início de serviço e agora funciona perfeitamente!
Arman Karimi
Funcionou para mim. No entanto, há alguma maneira de especificar isso de forma programática?
Sisir
Entendi. Clique com o botão direito em serviceProcessInstaller -> Propriedades -> Conta e defina-o como "LocalSystem" em vez do padrão "Usuário". Instale o serviço e pronto.
Sisir de
10

Certifique-se de que Path to executableaponta para um executável real (clique com o botão direito do mouse em serviço -> Propriedades -> guia Geral). Via powershell (e sc.exe) você pode instalar um serviço sem apontar para um executável real ... ahem.

Aage
fonte
Eu acidentalmente deixei uma pasta em vez do arquivo .exe. Para corrigir esse problema, tive que "sc delete servicenameXYZ" + reiniciar o servidor para excluir o serviço completamente e reinstalar o arquivo .exe do serviço correto. Em seguida, começa como um encanto. Obrigado por este post.
Honza P.
Você me salvou! Atribuindo pasta, em vez do caminho completo do executável ... Arghhhh! Deveria ter parecido melhor ...
filtro
9

Eu tenho a solução:

1. Go to local service window(where all services found)
2. Just right click on your service name: 
3. click on "properties" 
4. go to "log on" tab
5. select "local system account"
6. click "ok"

agora você pode tentar iniciar o serviço.

John
fonte
1
Já selecionei "Conta do sistema local" e ainda recebo a mensagem.
user2568374
4

No meu caso, o seguinte não foi verificado.

insira a descrição da imagem aqui

Akshay Anand
fonte
2
Para outros leitores como eu: Esta captura de tela faz parte da janela de propriedades do serviço! Abra a janela Serviços (Executar: services.msc) e selecione Propriedades no menu de contexto que aparece após clicar com o botão direito do mouse no serviço!
MohaMad
4

Eu estava recebendo este erro porque interpretei mal a resposta aceita aqui: Criar serviço do Windows a partir do executável .

sc.exe create <new_service_name> binPath= "<path_to_the_service_executable>"

Pois <path_to_service_executable>, eu estava usando o caminho da pasta do executável, por exemploC:\Folder .

Precisa ser o caminho do executável , por exemplo C:\Folder\Executable.exe.

Jamie Butterworth
fonte
3

Para mim - a pasta na qual o serviço deveria ser executado e os arquivos nela contidos foram criptografados usando a opção "Criptografar" do Windows. Removendo isso e - voila!

Nicholas Blumhardt
fonte
Este acabou sendo o problema para mim - os administradores de sistemas palhaços no servidor que eu estava usando mexeram em algum botão para fazer com que todos os diretórios tivessem criptografia NTFS por padrão e, portanto, LocalSystem não tem realmente a chave de criptografia para lê-los ...
KJ Tsanaktsidis
3

Este erro ocorre quando há um erro em seu OnStartmétodo. Você não pode abrir um host diretamente no OnStartmétodo porque ele não abrirá realmente quando for chamado, mas em vez disso, aguardará o controle. Então você tem que usar um fio. Este é meu exemplo.

public partial class Service1 : ServiceBase
{
    ServiceHost host;
    Thread hostThread;
    public Service1()
    {
        InitializeComponent();
         hostThread= new Thread(new ThreadStart(StartHosting));

    }

    protected override void OnStart(string[] args)
    {
        hostThread.Start();
    }

    protected void StartHosting()
    {
        host = new ServiceHost(typeof(WCFAuth.Service.AuthService));
        host.Open();
    }

    protected override void OnStop()
    {
        if (host != null)
            host.Close();
    }
}
santhosh
fonte
3

se você tiver um código de erro de acesso negado 5. então provavelmente em seu código seu serviço está tentando interagir com alguns arquivos no sistema, como gravar em um arquivo de log

abra a log onguia de seleção de propriedades de serviços e marque a opção para permitir que o serviço interaja com a área de trabalho, clique em permitir que o serviço interaja com a área de trabalho

Kudzai Zishumba
fonte
3

Uma das causas para esse erro são permissões insuficientes (Usuários autenticados) em sua pasta local. Para dar permissão para 'Usuários autenticados' Abra a guia de segurança nas propriedades da sua pasta, edite e adicione o grupo 'Usuários autenticados' e aplique as alterações.

Uma vez feito isso, eu era capaz de executar serviços até mesmo através da conta de serviço de rede (antes disso, eu só conseguia executar com a conta do sistema local).

Vijay kumar.S
fonte
2

Eu tinha o serviço do Windows hospedado usando OWIN e TopShelf. Eu não fui capaz de iniciá-lo. Mesmo erro - "Acesso negado 5"

Acabei dando todas as permissões para meu bin / Debug.

O problema ainda não foi resolvido.

Dei uma olhada nos logs de eventos e descobri que o Microsoft.Owin.Host.HttpListener não estava incluído na biblioteca de classes que contém a classe de inicialização OWIN.

Portanto, certifique-se de verificar o log de eventos para identificar a causa raiz antes de começar a entrar em permanentes, etc.

Usuário SO
fonte
2
Bom ponto - o erro "acesso negado" pode não ter nada a ver com as permissões; sempre verifique o log do aplicativo no Visualizador de eventos.
mhenry1384,
oi, também estou verificando isso, onde está o caminho `. \ logs`. Estou registrando a partir do topshelf, mas não está lá
transformador
2

No meu caso, tive que adicionar 'Usuários autenticados' na lista de 'Nomes de grupos ou usuários' na pasta onde o executável foi instalado.

Sankar
fonte
1

Seu código pode estar sendo executado no contexto de segurança de um usuário que não tem permissão para iniciar um serviço.

Já que você está usando o WCF, suponho que esteja no contexto do SERVIÇO DE REDE.

consulte: http://support.microsoft.com/kb/256299

Shiraz Bhaiji
fonte
1
Eu dei direitos de "SERVIÇO LOCAL" e "SERVIÇO DE REDE" em meus diretórios de saída
Kris-I
Você também precisa definir a política de grupo para os serviços do sistema, support.microsoft.com/kb/256345/EN-US
Shiraz Bhaiji
1

Use a conta LocalSystem em vez da conta LocalService no Service Installer.

Você pode fazer isso seguindo as alterações abaixo na visualização do design do instalador do serviço:
Propriedades do instalador do processo do serviço -> Definir conta para LocalSystem.

ou fazendo a alteração abaixo no arquivo designer.cs do instalador do serviço:

this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
Jay Shah
fonte
1

Clique com o botão direito no servicein service.msc e selecioneproperty .

Você verá um caminho de pasta em Path to executable C: \ Users \ Me \ Desktop \ project \ Tor \ Tor \ tor.exe

Navegue até C: \ Users \ Me \ Desktop \ project \ Tor e clique com o botão direito em Tor.

Selecione property, security, edite depois add. No campo de texto, digiteLOCAL SERVICE , clique em ok e marque a caixaFULL CONTROL

Clique em addnovamente e depois entre NETWORK SERVICE, cliqueok , marque a caixaFULL CONTROL

Em seguida, clique em ok (na parte inferior)

MagTun
fonte
0

Ter um olhar para Process Utilities > Process monitora partir http://www.sysinternals.com .

Esta é uma ferramenta que permite monitorar o que um processo faz. Se você monitorar este processo de serviço, deverá ver um acesso negado em algum lugar e em qual recurso o acesso negado é concedido.

Pieter van Ginkel
fonte
0

Para o erro 5, fiz o oposto da solução acima. "O primeiro erro 5: Erro de acesso negado foi resolvido dando permissões ao diretório de saída para a conta NETWORK SERVICE."

Mudei a minha para a conta local, em vez da conta de serviço de rede, e como estava conectado como administrador, funcionou

Chris
fonte
0

Se você está recebendo este erro em uma máquina servidor, tente dar acesso à pasta que você obteve o exe de serviço real do Windows. Você deve ir para a guia de segurança e selecionar o serviço local como usuário e deve dar acesso total. Você deve fazer o mesmo para o exe também.

Darshana
fonte
0

Monitorei sppsvc.exe usando o monitor de processo e descobri que ele estava tentando gravar na chave HKEY_LOCAL_MACHINE \ SYSTEM \ WPA. Depois de conceder permissões para SERVIÇO DE REDE nesta chave, consegui iniciar o serviço e o Windows de repente reconheceu que ele foi ativado novamente.

Guilherme Noronha
fonte
0

Eu acidentalmente configurei meu serviço para ser executado, pois a Local servicesolução era mudar paraLocal System

meda
fonte
0

Depois de bater minha mão contra minha mesa por algumas horas tentando descobrir isso, de alguma forma meu método "Principal" foi esvaziado de seu código!

ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] 
{ 
    new DMTestService()
};
ServiceBase.Run(ServicesToRun);

Outras soluções que encontrei:

  • Atualizando o .NET framework para 4.0
  • Certificando-se de que o nome do serviço dentro de InitializeComponent () corresponde à propriedade do nome do serviço do instalador

    private void InitializeComponent()
    ...
    this.ServiceName = "DMTestService";
  • E uma boa reinicialização do servidor não faz mal

Szhlopp

Szhlopp
fonte
0

Em caso de sistema ficar sem espaço livre no disco local.

Alexander Puchkov
fonte
0

Tive esse problema hoje em um serviço que estava desenvolvendo e nenhuma das outras sugestões sobre essa questão funcionou. No meu caso, eu tinha uma dependência .dll ausente na pasta de onde o serviço era executado.

Quando adicionei as dependências, o problema foi embora.

Frank Bryce
fonte
0

No meu caso, mantive o projeto na área de trabalho e para acessar a área de trabalho precisamos adicionar permissão à pasta, então simplesmente movi a pasta do meu projeto para o diretório C: \ agora está funcionando perfeitamente.

Ali786
fonte
0

Não sei se minha resposta faria sentido para muitos, mas também enfrentei o mesmo problema e a solução era absurdamente simples. Tudo o que tive que fazer foi abrir o programa que usei para executar o código como administrador. (clique com o botão direito -> Executar como Administrador).

Isso foi tudo.

Rai
fonte
0

Como o pop-up de erro sugere, isso está relacionado à permissão. Portanto, execute o serviço como conta "LocalSystem".

Para fazer o mesmo, clique com o botão direito serviceProcessInstaller -> Properties -> Accounte defina-o como em "LocalSystem"vez do padrão "User". Instale o serviço e pronto.

Sisir
fonte
Esta é uma correção de trabalho comprovada e não qualquer solução alternativa. O votante negativo pode explicar o motivo da antipatia para que os outros entendam
Sisir,
0

verifique o log de eventos do Windows para obter mensagens de erro detalhadas. Resolvi o mesmo após verificar o log de eventos.

Amrik Singh
fonte
-1

Tive esse problema em um serviço que estava implantando e nenhuma das outras sugestões sobre essa questão funcionou. No meu caso, era porque meu .config (xml) não era válido. Cometi um erro de copiar e colar ao copiar de qualif para prod.

SabineA
fonte