windows-services - open - windows services control panel
Cómo resolver el error "El servicio especificado ha sido marcado para su eliminación" (17)
Al eliminar las claves de registro como se sugirió anteriormente, mi servicio se atascó en el estado de parada. El siguiente procedimiento funcionó para mí:
abra el administrador de tareas> seleccione la pestaña servicios> seleccione el servicio> haga clic con el botón derecho y seleccione "ir a procesar"> haga clic con el botón derecho en el proceso y seleccione Finalizar proceso
El servicio debería haberse ido después de eso.
Intento eliminar un servicio de Windows con sc delete <service name>
y encuentro el siguiente error:
[SC] DeleteService FAILED 1072:
El servicio especificado ha sido marcado para su eliminación.
Lo que ya he hecho:
Detuvo el servicio, obviamente. El
sc queryex "<service name>"
da el siguiente resultado:SERVICE_NAME: Stub service TYPE : 10 WIN32_OWN_PROCESS STATE : 1 STOPPED WIN32_EXIT_CODE : 1067 (0x42b) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0 PID : 0 FLAGS :
Aseguró que Microsoft Management Console está cerrado (
taskkill /F /IM mmc.exe
),Aseguró que el Visor de Eventos está cerrado ,
Se eliminó la clave HKEY_LOCAL_MACHINE / SYSTEM / CurrentControlSet / Services / <service name> del registro .
Debido a esta eliminación,
services.msc
aún muestra el servicio (con un nombre, pero sin estado o tipo de inicio), pero la descripción es "<Error al leer la descripción. Código de error: 2> ”. Al intentar ver las propiedades, "El sistema no puede encontrar el archivo especificado" se muestra cinco veces.
El problema persiste.
¿Cuál es el próximo paso?
Cerrar todas las ventanas que estaban abiertas en ese momento y luego ejecutar el siguiente comando resolví el problema por mí:
taskkill /F /IM mmc.exe
El principal motivo del error es que el proceso no se detiene. para resolverlo, inicie el administrador de tareas, vaya a servicios y vea si aún puede ver su servicio, luego vaya al proceso de ese servicio y finalice el proceso. Que el problema se solucione por completo.
En mi caso funcionó después de cerrar los Services
. Verifique si Services.msc
está abierto, si es así, ciérrelo y verifique que el proceso de servicio se encuentre en Task Manager
.
En mi caso, ejecuto taskkill /f /im dongleserver.exe
, donde dongleserver.exe
es el archivo exe de mi programa.
Entonces ya puedo reinstalar mi programa.
En mi caso, fue causado por una excepción no controlada al crear la fuente de eventLog. Utilice try catch para señalar la causa.
Eso significa que el servicio todavía está listado como deshabilitado en services.msc. Simplemente cierre services.msc y vuelva a abrir como administrador ... El servicio no aparecerá en la lista. Ahora, instale el servicio usando el comando,
installutil "ruta de servicio"
Estaba teniendo este problema cuando estaba usando Application Verifier para verificar mi servicio win. Incluso después de cerrar App Ver, mi servicio fue bloqueado de la eliminación. Solo eliminando el servicio de App Ver se resolvió el problema y el servicio se eliminó de inmediato. Parece que algún proceso sigue usando tu servicio después de que intentaste eliminar uno.
Esto es lo que funcionó para mí: me topé con el mismo problema: mi servicio estaba bloqueado en ''marcado para eliminación''. - Abrí services.msc Mi servicio se mostró como en ejecución, aunque ya estaba desinstalado. - Hice clic en Detener Recibí un mensaje de error, diciendo que el servicio no está en un estado para recibir mensajes de control. Sin embargo, el servicio fue detenido. - Servicios cerrados.msc. - Servicios reabiertos.msc. - El servicio se ha ido (ya no se muestra en la lista de servicios).
(El entorno era Windows 7.)
Esto también puede ser causado por dejar abierta la consola de Servicios. Windows no eliminará el servicio hasta que se cierre.
Hola chicos, tuve el mismo problema, finalmente decidí matar el proceso de servicio.
Para ello prueba a continuación los pasos:
obtener la identificación del proceso de servicio con
sc queryex <service name>
proceso de matar con
taskkill /F /PID <Service PID>
Parece que en las versiones de Windows posteriores a Windows 7 (sin verificar, pero según la experiencia más reciente con Windows Server 2012 R2), el Administrador de control de servicios (SCM) es más estricto.
Mientras que en Windows 7 simplemente genera otro proceso, ahora está verificando si el proceso de servicio todavía existe y puede devolver ERROR_SERVICE_MARKED_FOR_DELETE (1072) para cualquier llamada posterior a CreateService / DeleteService incluso si el servicio parece detenerse.
Estoy hablando del código de la API de Windows aquí, pero quiero delinear claramente lo que está sucediendo, por lo que esta secuencia puede llevar al error mencionado:
SC_HANDLE hScm = OpenSCManager(nullptr, nullptr, SC_MANAGER_ALL_ACCESS);
SC_HANDLE hSvc = OpenService(hScm, L"Stub service", SERVICE_STOP | SERVICE_QUERY_STATUS | DELETE);
SERVICE_STATUS ss;
ControlService(hSvc, SERVICE_CONTROL_STOP, &ss);
// ... wait for service to report its SERVICE_STOPPED state
DeleteService(hSvc);
CloseServiceHandle(hSvc);
hSvc = nullptr;
// any further calls to CreateService/DeleteService will fail
// if service process is still around
La razón por la que sigue existiendo un proceso de servicio después de que ya informó su estado SERVICE_STOPPED no es sorprendente. Es un proceso regular, cuyo hilo principal está ''atascado'' en su llamada a la API StartServiceCtrlDispatcher
, por lo que primero reacciona a una acción de control de detención, pero luego tiene que ejecutar su secuencia de código restante.
Es un poco desafortunado que SCM / OS no esté manejando esto adecuadamente para nosotros. Una solución programática es algo simple y precisa: obtenga el identificador de proceso del ejecutable del servicio antes de detener el servicio, luego espere a que se señale este identificador.
Si se aborda el problema desde la perspectiva de la administración del sistema, la solución también es esperar a que el proceso de servicio desaparezca por completo.
Probablemente la eliminación del servicio falla porque
protected override void OnStop()
lanzar error al detener un servicio. envolver las cosas dentro de un retén de prueba evitará la marca de error de eliminación
protected override void OnStop()
{
try
{
//things to do
}
catch (Exception)
{
}
}
Puede haber varias causas que hagan que el servicio quede bloqueado en "marcado para eliminación".
Se abre el Explorador de procesos de SysInternals . Cerrarlo debería llevar a la eliminación automática del servicio.
Microsoft Management Console (MMC) está abierto . Para asegurarse de que todas las instancias estén cerradas, ejecute
taskkill /F /IM mmc.exe
.Se abre la consola de servicios . Este es el mismo que el punto anterior, ya que la consola de Servicios está alojada en MMC.
El visor de eventos está abierto . De nuevo, esto es lo mismo que el tercer punto.
La clave HKEY_LOCAL_MACHINE / SYSTEM / CurrentControlSet / Services / {service name} existe .
Alguien más está conectado al servidor y tiene abierta una de las aplicaciones mencionadas anteriormente.
Una instancia de Visual Studio utilizada para depurar el servicio está abierta.
Se descubrió una cosa más para verificar: busque en el Administrador de tareas: si otros usuarios están conectados a este cuadro, incluso si están "desconectados", tiene que cerrar sesión para obtener el servicio que finalmente se eliminará.
Si los pasos proporcionados por @MainMa no funcionaron, siga los siguientes pasos
Paso 1 Intente matar el proceso desde el administrador de tareas de Windows o use taskkill / F / PID. Puede encontrar el pid del proceso mediante el comando ''sc queryex''. Intenta el siguiente paso si aún no puedes desinstalar.
Paso 2 Si está arriba
Ejecute Autoruns for Windows Search para servicio por nombre y elimine resultados.
pasos a seguir:
paso-1 ve a la ubicación C: / Windows / Microsoft.NET / Framework / v4.0.30319
Paso 2, ejecute el comando: installutil / u full-path / servicename.exe
Paso 3: cierra el panel de servicios y vuelve a abrirlo.
Paso 4, ejecute el comando: installutil full-path / servicename.exe