Mi proyecto actual que implica la implementación de un actualizado .archivo exe que se ejecuta como un Servicio de Windows. Para sobrescribir el existente .exe con la nueva versión, yo actualmente se necesita:

  1. Detener el servicio
  2. Desinstalar el servicio
  3. Reiniciar el sistema (para versiones de Windows se mantenga en el archivo)
  4. Implementar el nuevo .exe
  5. Vuelva a instalar el servicio de
  6. Inicio de la mejora del servicio.

Me gustaría evitar que se reinicie el equipo, por lo que este puede ser un guión/actualización automatizada.

¿Hay alguna forma de evitar que reiniciar? Tal vez una herramienta de línea de comandos que va a obligar a Windows a dar hasta la muerte de agarre en el antiguo .exe?

  • Gracias a todos por su ayuda! He encontrado que el origen de mi problema era una manija en el .exe por WMI. Ver a mi nueva pregunta en: » stackoverflow.com/questions/302315/…
  • Para su INFORMACIÓN, si usted tiene el administrador de Servicios de abierto, necesita cerrar antes de volver a instalar el servicio, de otra manera usted tendrá un ‘servicio ya está marcado para su eliminación’ de error.
  • En mi experiencia «[SC] ERROR de CreateService 1072: El servicio especificado se ha marcado para su eliminación» depende de si el servicio va a desinstalar no se ha interrumpido la primera. He intentado reproducir el error de simplemente tener la herramienta administrativa de Servicios abiertos y no pudo.
InformationsquelleAutor Nate Sauber | 2008-11-18

9 Comentarios

  1. 78
    sc delete "service name"
    

    va a eliminar un servicio. Me parece que el utilidad de sc es mucho más fácil de localizar que escarbar para installutil. Recuerde que para detener el servicio si usted no tiene ya.

    • sc delete «nombre de servicio» < al menos en windows 7.
    • sí… y, finalmente, ms va a ir a » — » *nix. Un paso a la vez =)
    • en mi caso, el comando sc delete «serviceName» tenga en cuenta que debe excute de la línea de comandos como administrador
    • he encontrado que sc delete no detener la ejecución de un servicio cuando su desinstalación sino que lo marca para su eliminación, que es lo que su documentación también se describe.
  2. 14

    Se que usted no es capaz de parar el servicio antes de la actualización y reiniciar después de la actualización) usando los siguientes comandos?

    net stop <service name>
    net start <service name>
    

    Siempre estoy probando/implementación de un servicio que yo soy capaz de subir archivos sin necesidad de reinstalar mientras se detiene el servicio. No estoy seguro de si el problema que tiene es diferente.

    • Este siempre ha sido mi experiencia he infinitamente servicios actualizados, simplemente por dejar de tomarlas, y la sustitución de la .EXE. Es sólo un proceso ordinario de todos modos.
    • Mismo aquí – que funcionó para mí como se describe para los meses de desarrollo en una suite de servicios de Windows (que se ejecuta en Windows 7).
  3. 14

    Me tenían el mismo problema que usted. Tengo un sistema de servicio que quiero desinstalar y luego reinstalar como parte de una actualización. En ciertos sistemas, esto no funcionaría sin necesidad de reiniciar. El problema era que una llamada a DeleteService() volvería a aceptar, pero la siguiente llamada a CreateService() me dicen que el servicio todavía estaba allí, pero marcado para su eliminación (código de error 1072). El registro podría reflejar que, desde la subclave todavía estaba allí (en HKLM\System\CurrentControlSet\Services), pero «DeleteFlag» se ha establecido en 1. A partir de ese punto, sólo un reinicio podría arreglar la situación.

    Algunas cosas que no funcionan:

    • El uso de «sc delete»: tenía los mismos problemas que I. La llamada volvería ok, pero el servicio no fue realmente se ha ido y sigue en el registro con DeleteFlag = 1.
    • De eliminar la clave en el registro. El jefe de Servicio parece mantener una base de datos en la memoria y el registro es sólo una copia de la misma para el siguiente arranque.
    • La adición de esperar bucles, esperando .los archivos exe para estar listo para ser sobrescrito, matar el proceso, etc.
    • El cierre de las manijas para el servicio. Cual??

    Pero aquí es lo que ha funcionado:

    Me di cuenta de que en algunos artículos aquí en stackoverflow que net.exe ha start/stop características así (yo sólo sabía de sc.exe la utilidad). Y, extrañamente, un «net stop svcname» además de un «sc delete svcname» funcionó! Así net.exe debe hacer algo no lo hago.

    Pero net.exe no contiene una importación a ControlService(), así que ¿cómo es detener el servicio? Me enteré de que net.exe genera net1.exe pero net1.exe no importa ControlService() así. He utilizado el gran API de la utilidad de Monitor ( http://www.rohitab.com/apimonitor ) para ver lo que net1.exe está haciendo, pero nunca se llama a todo lo que parecía prometedor.

    Pero luego vi que las importaciones NetServiceControl() de NETAPI32.DLL (que había al menos «Servicio» en su nombre!). MSDN dice que esta función es obsoleta. Sin embargo, me encontré con el prototipo en LMSvc.h y algún parámetro descripción aquí: http://cyberkinetica.homeunix.net/os2tk45/srvfpgr/369_L2_NetServiceControlorN.html . Cuando se carga NETAPI32.DLL y el uso NetServiceControl(NULL, service_name, 3, 0, 0) (3 es para SERVICE_CTRL_UNINSTALL, que se utiliza para detener) detiene el servicio después. Y no se puede borrar y volver a instalar a posteriori sin DeleteFlag o reiniciar!

    Así que nunca fue un problema de eliminación, pero de detener el servicio correctamente. Y NetServiceControl() hace el truco. Lo siento por el post largo, pero pensé que podría ayudar a alguien con problemas similares. (Sólo para referencia, yo uso Win7 SP1 x64.)

    • ¿Cómo se puede simular de forma fiable la «marcada para su eliminación» del estado? Lo que yo hice para simular que se acaba de abrir un identificador para el servicio con la normal a la API de servicios. con la mano abierta, este método no funciona. Cuando se cierra el identificador, el servicio desaparece automáticamente.
    • Thanx! yo estaba buscando la diferencia entre la «net stop» y «sc stop»
    • Gran análisis!
  4. 3

    Si en .net ( no estoy seguro de si funciona para todos los servicios de windows)

    • Detener el servicio (Esta puede ser la razón por la que usted está teniendo un problema).
    • InstallUtil -u [nombre del ejecutable]
    • Installutil -i [nombre del ejecutable]
    • Iniciar de nuevo el servicio…

    A menos que me voy a cambiar el servicio público de la interfaz, a menudo me implementar las versiones actualizadas de mis servicios sin siquiera unistalling/reinstalación de… Todo lo que hago es parar el servicio, reemplace los archivos y reiniciar de nuevo el servicio…

    • En mi caso, no puedo hacer que, debido a algún problema de permisos
  5. 3

    Como señaló StingyJack y mcbala, y en referencia a los comentarios realizados por Mike L, mi experiencia es que en un equipo con Windows 2000, cuando desinstalar /reinstalar .Los servicios de la red, «installutil /u» hace requieren un reinicio, incluso cuando el servicio se haya detenido anteriormente. «sc /eliminar», por otro lado, no requiere un reinicio, se elimina el servicio de inmediato (siempre y cuando se detiene).

    Menudo me he preguntado, en realidad, si existe una buena razón «installutil /u» requiere un reinicio… Es «sc /eliminar» en realidad haciendo algo mal /dejando algo colgando?

    • +1 para la calificación «(siempre y cuando se detiene)». Esto es consistente con mi experiencia – aunque en Windows 7.
  6. 2

    Tanto Jonathan y Carlos están a la derecha… tienes que parar el servicio de primera, a continuación, desinstalar y reinstalar. La combinación de sus dos respuestas es la perfecta archivo de proceso por lotes o secuencia de comandos de PowerShell.

    Voy a hacer mención de una precaución aprendido de la manera difícil, Windows 2000 Server (posiblemente el sistema operativo de cliente así) requerirá un reinicio antes de que la vuelva a instalar no importa qué. Debe haber una clave del registro que no está completamente desactivada hasta que el cuadro se reinicia. Windows Server 2003, Windows XP y posteriores versiones del sistema operativo no sufren dolor.

  7. 2

    (para versiones de Windows se mantenga en el
    archivo)

    Lugar, hacer Ctrl+Alt+Supr justo después de la Parada del servicio y matar a los .exe del servicio. Que, puede desinstalar el servicio sin necesidad de reiniciar. Esto me pasó a mí en el pasado y que se resuelve la parte que tiene que reiniciar.

  8. 2

    De ser necesario quitar manualmente un servicio:

    1. Ejecutar Regedit o regedt32.
    2. Encontrar la clave de registro de entrada para el servicio bajo la siguiente clave:
      HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services
    3. Eliminar la Clave del Registro

    Usted tendrá que reiniciar el ordenador antes de que la lista se actualiza en los servicios de

  9. 0

    Estoy utilizando el InstallUtil.exe lleno de .NET Framework.

    El uso de desinstalar es: InstallUtil ‘\ruta\a\assembly\con\el\installer\classes’ /u así, por ejemplo: installutil MyService.HostService.exe /u

    La /u interruptor de stands para desinstalar, sin que la util realiza instalación normal del servicio. La utilidad se detiene el servicio si se está ejecutando y nunca he tenido problemas con Windows mantenimiento de bloqueo en el servicio de archivos. Usted puede leer acerca de otras opciones de InstallUtil en MSDN.

    P. S.:si usted no tiene installutil en su variable de entorno path completo en una ruta como esta: C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe "C:\MyServiceFolder\MyService.HostService.exe" /u o si usted necesita la versión de 64 bits se puede encontrar en ‘C:\Windows\Microsoft.NET\Framework64\v4.0.30319\’ .El número de versión en la ruta varía dependiendo .NET versión.

Dejar respuesta

Please enter your comment!
Please enter your name here