
Después de crear una tarea programada después de seguiresta pregunta de superusuario, puedo iniciar con éxito un servicio sin el aviso de UAC. Las opciones seleccionadas fueron:
Start a program
Program\script
=C:\Windows\System32\net.exe
Add arguments (optional)
=start "SERVICE-NAME"
Luego, en un archivo por lotes, llamo schtasks /run /tn TASK-NAME
. Después de probar esto, creé un acceso directo al archivo por lotes y configuré la Run
opción en Minimised
.
Todo esto funciona excepto que cuando se inicia el servicio real, aparece una ventana de símbolo del sistema maximizada con una sola línea The SERVICE-NAME service is starting
. Luego desaparece después de unos segundos.
¿Cómo le digo al Programador de tareas que inicie el programa de destino de forma silenciosa (o minimizado) sin la ventana emergente? Si el símbolo del sistema emergente estuviera minimizado, estaría bien.
Respuesta1
El problema es que cuando configura el acceso directo para que se ejecute minimizado, inicia minimizado solo el programa que inicia la tarea programada, no el programa que ejecuta la tarea. Necesitas otra pieza en la secuencia de lanzamiento de tu máquina Rube Goldberg, realiza los siguientes cambios:
Program\script
=C:\Windows\System32\cmd.exe
Add arguments (optional)
=/c start /min net start "SERVICE-NAME"
El primer "inicio" es el cmd.exe
start
comando, que usamos para dos funciones:
- Lanzamiento
net.exe
minimizado. - Termine
taskeng.exe
tan pronto comonet.exe
se inicie en lugar de esperar a que termine.
Tenga en cuenta que esta solución no es perfecta ya que taskeng.exe
parpadeará brevemente hasta que net.exe
se inicie, pero normalmente menos de un segundo.
Respuesta2
Puede iniciar un servicio (o cualquier otro programa) sin que ninguna ventana parpadee,ni siquiera minimizado.
Crea una tarea:
- Comando/script:
mshta.exe
- Agregue argumentos (opcional):
"javascript: new ActiveXObject('shell.application').ShellExecute('net.exe', 'start <SERVICE-NAME>', '', 'open', 0); close();"
Como desea iniciar un servicio, necesita derechos administrativos, así que verifiqueEjecutar con los privilegios más altosen la primera pestaña.
Para ejecutar la tarea sin mostrar ninguna ventana, utiliza el mismo truco. Cree un acceso directo con el siguiente comando:
mshta.exe "javascript: new ActiveXObject('shell.application').ShellExecute('schtasks.exe', '/run /tn <TASK-NAME>', '', 'open', 0); close();"
Notas
- El usuario que ejecuta el acceso directo debe ser administrador porque los usuarios normales sólo pueden ejecutar sus tareas y esta tarea es una de las que tiene los privilegios más altos. De lo contrario, el
schtasks
comando fallará con "acceso denegado". - Si la tarea está en una carpeta de tareas, es
/tn <TASK-NAME>
del/tn <FOLDER>\<TASK>
shell y debeduplicar la barra invertidapara escapar de él en elmshta
comando del acceso directo. - Algunos programas antivirus (al menos Kaspersky) pueden considerar que una tarea que se utiliza de
mshta
esta manera es sospechosa o un riesgo potencial y, por lo tanto, eliminarla. - Puedes utilizar este truco para ejecutar cualquier programa oculto sin que aparezca ningún elemento emergente. Simplemente reemplácelo
net.exe
con el nombre de su programa y lastart <SERVICE-NAME>
pieza con los parámetros necesarios.
Respuesta3
Solo me funciona esto, Windows 11