Agregar una nueva dependencia a un servicio de Windows que ya tiene dependencias

Agregar una nueva dependencia a un servicio de Windows que ya tiene dependencias

Quiero agregar mediante un script por lotes una nueva dependencia de servicio a un servicio existente con dependencias antiguas, sin eliminar estas dependencias.

Sé que el comando sc config ServiceA depend= ServiceB/ServiceC/ServiceDpuede agregar múltiples dependencias, pero no sé cómo usarlo para, por ejemplo, agregar la dependencia ServiceD a un servicio que depende de ServiceB y ServiceC, con el mismo resultado y sin mencionar las dependencias antiguas (ya que no los conozco).

¿Cuál es la manera de hacer eso? Y, ¿cómo revertir el cambio (también mediante lotes)?

Por cierto, no tengo mucha experiencia con Batch.

Respuesta1

Descubra las dependencias existentes, agregue una nueva y vuelva a escribir todo, digamos que tiene un servicio llamado w3svc, puede usar:

sc.exe  qc  w3svc

o en PowerShell:

(get-service w3svc | Select ServicesDependedOn).ServicesDependedOn

donde puede recorrerlos y crear un nuevo comando sc.exe para ejecutar.

Ejemplo:

 $serviceName = "w3svc"
 $cmd = "config $serviceName depend= "
 (gsv $serviceName | Select ServicesDependedOn).ServicesDependedOn | % {$cmd += $_.Name + "/"}
 $cmd += "myMasterService"
 invoke-expression "sc.exe $cmd"

Estamos creando una cadena de comando a partir de los servicios existentes y agregamos la suya propia.

Para eliminar el tuyo, haz lo mismo, pero en el bucle excluye tu servicio.

 $serviceName = "w3svc"
 $cmd = "config $serviceName depend= "
 (gsv $serviceName | Select ServicesDependedOn).ServicesDependedOn | % {
      if ($_.Name -ne "myMasterService")
      {
           $cmd += $_.Name + "/"
      }
 }
 # remove the last slash
 $cmd = $cmd -replace "/$", ""   
 invoke-expression "sc.exe $cmd"

No he probado los comandos sc.exe reales, pero supongo que sabes lo que estás haciendo.

información relacionada