¿Hay alguna forma de configurar un proceso de servicio de Windows (por ejemplo, squidNT, SQL Server, etc.) para que se inicie automáticamente con baja prioridad sin cambiar manualmente la prioridad del proceso a través del Administrador de tareas?
¿Hay alguna forma de configurar un proceso de servicio de Windows (por ejemplo, squidNT, SQL Server, etc.) para que se inicie automáticamente con baja prioridad sin cambiar manualmente la prioridad del proceso a través del Administrador de tareas?
Respuestas:
El Administrador de control de servicios, que se encarga de iniciar / detener servicios, no tiene ningún mecanismo (en ninguna versión de Windows hasta ahora) para especificar la prioridad en los procesos que inicia.
Dado que puede modificar la prioridad en un proceso que ya se está ejecutando, su mejor opción podría ser utilizar una herramienta para hacerlo.
No conozco una herramienta de línea de comandos de Microsoft para modificar la prioridad del proceso, pero la línea de comandos "PV", también disponible en http://www.teamcti.com/pview/prcview.htm tiene una función para establecer la prioridad .
pv -pb process-name.exe
Eso establecería "process-name.exe" en la prioridad "Por debajo de lo normal".
Si puede vivir con el proceso que comienza con la prioridad "Normal" hasta que pueda cambiarlo, puede hacerlo con un script que se ejecuta como una "Tarea programada" para disparar cada cierto tiempo (en caso de que el servicio se ponga rebotado).
Es un truco rápido y sucio, pero le debo mucho de mi fortuna a trucos rápidos y sucios que hacen el trabajo.
Las respuestas anteriores no funcionaron para mí. Terminé de crear el siguiente script de PowerShell:
ChangePriority.ps1
Get-WmiObject Win32_process -Filter 'name="ProcessName.exe"' | ForEach-Object {$_.SetPriority(128)}
Y luego creé una tarea programada que la llamaba cada 5 minutos. Desde el indicador del administrador o secuencia de comandos por lotes:
schtasks /Create /tn "Process Priority Change" /sc MINUTE /mo 5 /ru SYSTEM /tr "powershell -noprofile -executionpolicy bypass -file \"%cd%\ChangePriority.ps1\""
Intenté usar wmic
como se describe aquí para hacer que la tarea programada no dependa del archivo fallida. De forma similar al uso del script de PowerShell: no pude crear un solo comando que solo crea una tarea con el script en línea. Aprecio si lograste hacerlo y agregaste otra respuesta.
Los valores de prioridad en el script de PowerShell se pueden encontrar aquí [1].
Lo siguiente también podría funcionar. Edite la clave de registro de ImagePath y use el comando de inicio de cmd.exe:
START ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/WAIT] [/B] [command/program]
[parameters]
ImagePath
debe respetar la interfaz para los servicios de Windows, y start
no se implementa ni lo enrutará al ejecutable que se está iniciando.
Tuve que hacer eso para que Teamcity tomara menos CPU. Y, dado que teamcity es la única aplicación de Java que estamos ejecutando, esa solución funciona perfectamente.
Cree un archivo por lotes, que comenzará su servicio, y reducirá la prioridad, como:
net start tcbuildagent
proceso de wmic teamcity
net start
donde name = "java.exe" CALL setpriority "debajo de lo normal"
Configuré el activador TaskScheduler con un retraso de 1 minuto, para no interferir con el inicio de otros servicios.
PD: ¡también puede configurar todos los servicios de inicio como manuales, y usar ese archivo por lotes para iniciarlos todos en el orden que desee! SQL, IIS, etc.