2009-06-18 10 views
27

Quiero ejecutar una herramienta de línea de comandos para procesar datos. No necesita estar bloqueando. Quiero que sea de baja prioridad. Así que escribí el siguiente¿Cómo inicio un proceso con baja prioridad? C#

Process app = new Process(); 
app.StartInfo.FileName = @"bin\convert.exe"; 
app.StartInfo.Arguments = TheArgs; 
app.PriorityClass = ProcessPriorityClass.BelowNormal; 
app.Start(); 

Sin embargo, aparece un System.InvalidOperationException con el mensaje "Ningún proceso está asociado con este objeto." ¿Por qué? ¿Cómo inicio correctamente esta aplicación con baja prioridad?

Sin la línea app.PriorityClass = ProcessPriorityClass.BelowNormal; la aplicación funciona bien.

Respuesta

38

Intente configurar el PriorityClass DESPUÉS de iniciar el proceso. El Administrador de tareas funciona de esta manera, lo que le permite establecer prioridades en un proceso que ya se está ejecutando.

+1

Resulta que esta es la única manera. –

3

Si está preparado para P/invocar al CreateProcess, puede pasar CREATE_SUSPENDED en los indicadores. Luego puede modificar la prioridad del proceso antes de reanudar el proceso.

4

Puede crear un proceso con menor prioridad haciendo un pequeño truco. Usted bajar la prioridad del proceso padre, crear el nuevo proceso y luego volver a la prioridad de proceso original:

var parent = Process.GetCurrentProcess(); 
var original = parent.PriorityClass; 

parent.PriorityClass = ProcessPriorityClass.Idle; 
var child   = Process.Start("cmd.exe"); 
parent.PriorityClass = original; 

child tendrá el derecho de prioridad Idle proceso desde el principio.

Cuestiones relacionadas