2009-09-03 3 views
4

.NET 프로그램에서 프로세스를 시작하기위한 매개 변수를 설정하기 위해 System.Diagnostics.ProcessStartInfo를 사용하고 있습니다. 하여 프로세스가 시작되면, 나는 그것이 단지 백그라운드에서 실행되도록, 유휴 프로세스의 우선 순위를 변경하려면유휴 우선 순위로 .NET 프로세스를 시작하는 방법은 무엇입니까?

myProcess.PriorityClass = ProcessPriorityClass.Idle 

을 사용할 수 있으며, 내 CPU 파워를 게걸스럽게하지 않습니다. ProcessStartInfo 객체를 사용하여 프로세스가 "유휴"우선 순위로 시작하도록 지정하는 방법이 있습니까? 즉, 실행 중 아무 것도 유휴 속도보다 높은 속도로 실행중인 프로세스가 없도록하려면?

+1

왜 시작하지 않고 즉시 유휴 상태로 설정합니까? –

답변

5

일시 중단 된 프로세스를 시작한 다음 우선 순위를 변경 한 다음 프로세스를 다시 시작하십시오. 당신은 CreateProcess Win32 함수를 사용하여 CREATE_SUSPENDED 플래그를 사용하지만, 불행하게도 .NET에서 이에 대한 지원이 있는지 확실하지 않아 P/Invoke에 의존해야 할 수도 있습니다.

6

Process 클래스에 다른 우선 순위로 프로세스를 시작하는 API가 제공되지 않습니다. 가장 좋은 방법은 프로세스를 시작한 직후에 설정하는 것입니다. 이 과정을 시작하면, 당신은 Process.PriorityClass 설정할 수 있습니다 당신이 더 높은 우선 순위로 실행 프로세스를 방지하려면

var myProcess = Process.Start(...); 
myProcess.PriorityClass = ProcessPriorityClass.Idle; 

darin's answer는 P/호출 및 Windows API를 사용하여 해결 방법을 제공합니다. 심지어 이렇게하면 정상적인 우선 순위로 프로세스가 시작되지만 정지 상태에서 시작되면 프로세스가 실행되지 않으므로 우선 순위가 아무런 영향을 미치지 않습니다.

+0

나는이 질문에 이미 내가 이것을하고 있음을 언급했다. 그러나 프로세스가 실행되기 전에 우선 순위를 설정하려고합니다. 질문을 읽어보십시오. – Kibbee

+0

왜 downvote? ProcessStartInfo에서 우선 순위를 설정할 수는 없지만 내가 작성한 프로세스에서 설정할 수 있습니다 ... –

+0

프로세스를 생성 한 직후에이 작업을 수행 할 수 있습니다. 미안하지만 그 대답입니다 - 다른 대안은 없습니다. –

관련 문제