Error 5: acceso denegado al iniciar el servicio de Windows

97

Recibo este error cuando intento iniciar un servicio de Windows que he creado en C #:

texto alternativo

Mi código hasta ahora:

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;
}

Actualización n. ° 1

Resolví el problema anterior otorgando permisos a la cuenta SERVICIO DE RED, pero ahora tengo otro problema:

texto alternativo

Actualización n. ° 2

No se puede iniciar el servicio. System.InvalidOperationException: el servicio 'RightAccessManagementWcf.RightAccessWcf' no tiene puntos finales de aplicación (no de infraestructura). Esto puede deberse a que no se encontró ningún archivo de configuración para su aplicación, a que no se pudo encontrar ningún elemento de servicio que coincida con el nombre del servicio en el archivo de configuración o a que no se definieron puntos finales en el elemento de servicio. en System.ServiceModel.Description.DispatcherBuilder. TimeSpan timeout) en System.ServiceModel.Channels.CommunicationObject.

Kris-I
fuente
2
Su segundo problema no es fácil de resolver solo con ese mensaje. Deberá buscar en sus registros de eventos y ver cuál es el error real.
Matt Ellen
1
Compruebe si la cuenta del sistema tiene acceso a la carpeta.
Desarrollador

Respuestas:

116

Me doy cuenta de que esta publicación es antigua, pero no hay una solución marcada y solo quería contar cómo resolví esto.

El primer Error 5: Access Deniederror se resolvió otorgando permisos al directorio de salida de la NETWORK SERVICEcuenta.

El segundo Started and then stoppederror parece ser un mensaje genérico cuando algo falló en el servicio. Consulte el Visor de eventos (específicamente los 'Registros de Windows> Aplicación') para ver el mensaje de error real.

En mi caso, fue una configuración de servicio incorrecta en app.config.

Justin Skiles
fuente
7
Modifiqué los permisos navegando a la carpeta usando Explorer, haciendo clic con el botón derecho en Propiedades, Seguridad y luego asignando los permisos correctos a la cuenta de SERVICIO DE RED en la lista de nombres de usuario.
Justin Skiles
En mi caso sobre el "Error 5", fue el Servicio de Red no tiene derechos de acceso a la carpeta del ejecutable. Como es para desarrollo, no quería colocar los archivos en la carpeta Archivo de programa, sino en una carpeta compartida en la que podía copiar archivos de la máquina de desarrollo. Dar al servicio de red los derechos de lectura / ejecución / lista debería ser lo suficientemente bueno.
ZZZ
5
Añado LOCAL SERVICE "y" NETWORK SERVICE "a mi carpeta bin \ Debug y funciona, ¡Gracias!
Hernaldo Gonzalez
3
Solo una nota para la gente: si cambiar los permisos no soluciona su problema, asegúrese de revisar el Visor de eventos para ver si hay errores. Tuve un error de SQL completamente no relacionado que impidió que el servicio se iniciara, pero aún me dio el "Error 5: Acceso denegado". error.
Dtryan
Gracias por la nota sobre "Visor de eventos". Lo mismo conmigo, error no relacionado "No se encontró el punto final" pero se hizo pasar por "Acceso denegado (5)"
David Votrubec
26

Computadora -> Administrar -> Servicio -> Propiedades de [su servicio]. Luego, la pestaña con la información de la cuenta. Juega con esas configuraciones, como ejecutar el servicio con una cuenta de administrador o algo así.

Eso lo hizo por mí.

EDITAR: Lo que también puede ser el problema es que, la mayoría de los servicios se ejecutan como cuentas LOCAL SERVICEo LOCAL SYSTEM. Ahora, cuando se ejecuta C:/my-admin-dir/service.execon esas cuentas pero no se les permite ejecutar nada en ese directorio, obtendrá error 5. Así que ubique el ejecutable del servicio, RMB el directorio -> Propiedades -> Seguridad y asegúrese de que la cuenta con la que se ejecuta el servicio esté en la lista de usuarios que pueden tener control total sobre el directorio.

Mike de Klerk
fuente
21

Esto funcionó para mí.

  1. Haga clic con el botón derecho en la carpeta de nivel superior que contiene el ejecutable del servicio. Ir a Propiedades
  2. Ve a la pestaña "Seguridad"
  3. Haga clic en "EDITAR"
  4. Haga clic en "AÑADIR"
  5. Ingrese el nombre "SISTEMA", haga clic en Aceptar
  6. Resalte el usuario del SISTEMA y haga clic en la casilla de verificación PERMITIR junto a "Control total"
  7. Haga clic en Aceptar dos veces
cmcginty
fuente
11
"SISTEMA" no funcionó para mí, simplemente jugué y probé "SERVICIO" - eso funcionó.
Exter
4
Agregar "SERVICIO" y darle "Control total" funcionó para mí - Windows 10.
Fredrik
Dado que la propiedad de la cuenta de mi ServiceProcessInstaller (en mi ProjectInstaller) se estableció en LocalService, concedí permisos completos a la cuenta del servicio local y eso funcionó.
Dave
14

También obtuve el mismo error, se resolvió haciendo clic derecho en Servicio> Propiedades> Iniciar sesión> iniciar sesión como: Cuenta del sistema local.

Asmita Chavan
fuente
Gracias. Tuve un problema con tor.exe --service start, ¡y ahora funciona de maravilla!
Arman Karimi
Trabajó para mi. Sin embargo, ¿hay alguna forma de especificar esto mediante programación?
Sisir
Entendido. Haga clic con el botón derecho en serviceProcessInstaller -> Propiedades -> Cuenta y configúrelo en "LocalSystem" en lugar del "Usuario" predeterminado. Instala el servicio y listo.
Sisir
10

Asegúrese de que Path to executableapunte a un ejecutable real (haga clic con el botón derecho en el servicio -> Propiedades -> pestaña General). A través de powershell (y sc.exe) puede instalar un servicio sin apuntar a un ejecutable real ... ejem.

Edad
fuente
Accidentalmente dejé allí una carpeta en lugar del archivo .exe. Para solucionar este problema, tuve que "sc delete servicenameXYZ" + reiniciar el servidor para eliminar el servicio por completo y reinstalar el archivo .exe del servicio correcto. Entonces comienza como un encanto. Gracias por esta publicación.
Honza P.
¡Me salvaste! Asignando carpeta, en lugar de la ruta completa ejecutable ... ¡Arghhhh! Debería haber lucido mejor ...
ilter
9

Tengo la solucion:

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"

ahora puede intentar iniciar el servicio.

Juan
fuente
1
Ya he seleccionado "Cuenta del sistema local" y sigo recibiendo el mensaje.
user2568374
4

En mi caso, no se verificó lo siguiente.

ingrese la descripción de la imagen aquí

Akshay Anand
fuente
2
Para otros lectores como yo: ¡Esta captura de pantalla es parte de la ventana de propiedades del servicio! Abra la ventana Servicios (Ejecutar: services.msc) y seleccione Propiedades en el menú contextual que aparece después de hacer clic derecho en el servicio.
MohaMad
4

Recibí este error porque leí mal la respuesta aceptada desde aquí: Crear el servicio de Windows desde el ejecutable .

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

Porque <path_to_service_executable>, estaba usando la ruta de la carpeta del ejecutable, por ejemplo C:\Folder.

Debe ser la ruta del ejecutable , por ejemplo C:\Folder\Executable.exe.

Jamie Butterworth
fuente
3

Para mí, la carpeta desde la que se iba a ejecutar el servicio y los archivos que contiene se cifraron con la opción "Cifrar" de Windows. Quitando eso y - ¡voilá!

Nicholas Blumhardt
fuente
Este resultó ser el problema para mí: los administradores de sistemas payaso en el servidor que estaba usando habían girado un botón para hacer que todos los directorios tuvieran cifrado NTFS de forma predeterminada, por lo que LocalSystem no tiene la clave de cifrado para leerlos ...
KJ Tsanaktsidis
3

Este error ocurre cuando hay un error en su OnStartmétodo. No puede abrir un host directamente en el OnStartmétodo porque en realidad no se abrirá cuando se lo llame, sino que esperará el control. Entonces tienes que usar un hilo. Este es mi ejemplo.

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
fuente
3

si tiene un código de error de acceso denegado 5. entonces probablemente en su código su servicio está tratando de interactuar con algunos archivos en el sistema como escribir en un archivo de registro

abra la log onpestaña de selección de propiedades de servicios y marque la opción para permitir que el servicio interactúe con el escritorio, haga clic en permitir que el servicio interactúe con el escritorio

kudzai zishumba
fuente
3

Una de las causas de este error son los permisos insuficientes (usuarios autenticados) en su carpeta local. Para otorgar permiso para 'Usuarios autenticados' Abra la pestaña de seguridad en las propiedades de su carpeta, Edite y agregue el grupo 'Usuarios autenticados' y aplique los cambios.

Una vez hecho esto, pude ejecutar servicios incluso a través de la cuenta de servicio de red (antes de esto, solo podía ejecutar con la cuenta del sistema local).

Vijay kumar. S
fuente
2

Tuve el servicio de Windows alojado usando OWIN y TopShelf. No pude iniciarlo. Mismo error: "Acceso denegado 5"

Terminé dando todos los permisos a mi bin / Debug.

El problema aún no se resolvió.

Así que eché un vistazo a los registros de eventos y resultó que Microsoft.Owin.Host.HttpListenerno estaba incluido en la biblioteca de clases que contiene la clase de inicio OWIN.

Por lo tanto, asegúrese de verificar el registro de eventos para identificar la causa raíz antes de comenzar a obtener permanentes, etc.

SO Usuario
fuente
2
Buen punto: el error "acceso denegado" puede no tener nada que ver con los permisos; Compruebe siempre el registro de la aplicación en el Visor de eventos.
mhenry1384
hola, también estoy comprobando esto, ¿dónde está la ruta `. \ logs` Estoy registrando esto desde el estante superior pero no está allí
transformador
2

En mi caso, tuve que agregar 'Usuarios autenticados' en la lista de 'Nombres de grupos o usuarios' en la carpeta donde se instaló el ejecutable.

Sankar
fuente
1

Es posible que su código se esté ejecutando en el contexto de seguridad de un usuario al que no se le permite iniciar un servicio.

Dado que está utilizando WCF, supongo que está en el contexto del SERVICIO DE RED.

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

Shiraz Bhaiji
fuente
1
Di los derechos de "SERVICIO LOCAL" y "SERVICIO DE RED" en mis directorios de salida
Kris-I
También debe establecer la política de grupo para los servicios del sistema, support.microsoft.com/kb/256345/EN-US
Shiraz Bhaiji
1

Utilice la cuenta LocalSystem en lugar de la cuenta LocalService en el instalador de servicios.

Puede hacer esto desde el siguiente cambio en la vista de diseño de su instalador de servicio:
Propiedades del instalador de proceso de servicio -> Establecer cuenta en LocalSystem.

o haciendo el siguiente cambio en el archivo designer.cs de su instalador de servicios:

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

Haga clic derecho en serviceen service.msc y seleccione property.

Verá una ruta de carpeta Path to executablecomo C: \ Users \ Me \ Desktop \ project \ Tor \ Tor \ tor.exe

Navegue a C: \ Users \ Me \ Desktop \ project \ Tor y haga clic derecho en Tor.

Seleccionar property, security, edity luego add. En el campo de texto ingrese LOCAL SERVICE, haga clic en Aceptar y luego marque la casillaFULL CONTROL

Haga clic de addnuevo, luego ingrese NETWORK SERVICE, haga clic ok, marque la casillaFULL CONTROL

Luego haga clic en Aceptar (en la parte inferior)

MagTun
fuente
0

Echar un vistazo a Process Utilities > Process monitorpartir http://www.sysinternals.com .

Esta es una herramienta que le permite monitorear lo que hace un proceso. Si supervisa este proceso de servicio, debería ver un acceso denegado en algún lugar y en qué recurso se le da el acceso denegado.

Pieter van Ginkel
fuente
0

Para el error 5, hice lo contrario a la solución anterior. "El primer error 5: Error de acceso denegado se resolvió otorgando permisos al directorio de salida a la cuenta de SERVICIO DE RED".

Cambié la mía a la cuenta local, en lugar de la cuenta de servicio de red, y como inicié sesión como administrador funcionó

Chris
fuente
0

Si recibe este error en una máquina servidor, intente dar acceso a la carpeta donde obtuvo el exe real de servicio de Windows. Debe ir a la pestaña de seguridad y seleccionar el Servicio local como usuario y debe otorgar acceso completo. También deberías hacer lo mismo con el exe.

Darshana
fuente
0

He monitoreado sppsvc.exe usando el monitor de proceso y descubrí que estaba intentando escribir en la clave HKEY_LOCAL_MACHINE \ SYSTEM \ WPA. Después de otorgar permisos a NETWORK SERVICE en esta clave, pude iniciar el servicio y Windows de repente reconoció que estaba activado nuevamente.

Guilherme Noronha
fuente
0

Accidentalmente configuré mi servicio para que se ejecutara porque la Local servicesolución era cambiar aLocal System

meda
fuente
0

Después de golpear mi mano contra mi escritorio durante unas horas tratando de resolver esto, ¡de alguna manera mi método "Principal" se vació de su código!

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

Otras soluciones que encontré:

  • Actualización de .NET framework a 4.0
  • Asegurarse de que el nombre del servicio dentro de InitializeComponent () coincida con la propiedad del nombre del servicio del instalador

    private void InitializeComponent()
    ...
    this.ServiceName = "DMTestService";
  • Y un buen reinicio del servidor no está de más

Szhlopp

Szhlopp
fuente
0

En caso de que el sistema se quede sin espacio libre en el disco local.

Alexander Puchkov
fuente
0

Tuve este problema hoy en un servicio que estaba desarrollando, y ninguna de las otras sugerencias sobre esta pregunta funcionó. En mi caso, faltaba una dependencia .dll en la carpeta desde la que se ejecutaba el servicio.

Cuando agregué las dependencias, el problema desapareció.

Frank Bryce
fuente
0

En mi caso, mantuve el proyecto en el escritorio y para acceder al escritorio necesitamos agregar permiso a la carpeta, así que simplemente moví la carpeta del proyecto al directorio C: \, ahora está funcionando como un encanto.

Ali786
fuente
0

No sé si mi respuesta tendría sentido para muchos, pero yo también enfrenté el mismo problema y la solución fue escandalosamente simple. Todo lo que tenía que hacer era abrir el programa que usé para ejecutar el código como administrador. (clic derecho -> Ejecutar como administrador).

Eso fue todo.

Rai
fuente
0

Como sugiere la ventana emergente de error, esto está relacionado con el permiso. Así que ejecute el servicio como cuenta "LocalSystem".

Para hacer lo mismo, haga clic derecho serviceProcessInstaller -> Properties -> Accounty configúrelo en "LocalSystem"lugar del predeterminado "User". Instala el servicio y listo.

Sisir
fuente
Esta es una solución de trabajo comprobada y no una solución alternativa. ¿Puede el votante en contra por favor explicar la razón de su disgusto para que otros la entiendan?
Sisir
0

compruebe el registro de eventos de Windows para ver un mensaje de error detallado. Resolví lo mismo después de verificar el registro de eventos.

Amrik Singh
fuente
-1

Tuve este problema en un servicio que estaba implementando y ninguna de las otras sugerencias sobre esta pregunta funcionó. En mi caso, fue porque mi .config (xml) no era válido. Cometí un error de copiar y pegar al copiar de qualif a prod.

SabineA
fuente