2012-06-04 2 views
0

나는이 코드 조각이 :Process.Start를하고 할당 된 자원

Process pLight = new Process(); 
pLight.StartInfo.UseShellExecute = false; 
pLight.StartInfo.FileName = "MyCommand.exe"; 
// 
pLight.StartInfo.Arguments = "-myparam 0"; 
pLight.Start(); 
// 
pLight.StartInfo.Arguments = "-myparam 1"; 
pLight.Start(); 
// 
pLight.StartInfo.Arguments = "-myparam 2"; 
pLight.Start(); 

질문은 : 새로운 프로세스 내가 Start()를 호출 할 때마다 "창조"는 무엇입니까? Process.Start 문서에서

:

true를 반환 프로세스 리소스가 시작되면, 새로운 프로세스 자원이 시작되지 않으면 (예를 들어, 기존 프로세스가 재사용되는 경우) 거짓.

는하지만이 메소드를 호출 할 때마다 나는 진정한를 얻을. 그렇다면 어떻게 동일한 프로세스를 재사용 할 수 있습니까? 동일한 프로세스를 사용하여 여러 명령을 실행하는 방법이 있습니까?

답변

-1
pLightStartInfo = new ProcessStartInfo(); 
pLightStartInfo.UseShellExecute = false; 
pLightStartInfo.FileName = "MyCommand.exe"; 
pLightStartInfo.Arguments = "-myparam 0"; 
pLightStart(); 
pLightStartInfo.Arguments = "-myparam 1"; 
pLightStart(); 
pLightStartInfo.Arguments = "-myparam 2"; 

Process pLight = new Process(pLightStartInfo); // first time so a new Process will be started 

Process myOtherProcess = Process.Start(pLightStartInfo); // second time so myOtherProcess would reuse pLight, given original hadn't closed so both would be "pointing" at one MyCommand.exe 

그것을 자신을 해본 적이 있지만 의미하는 표시거야.

+0

그래서'pLight == myOtherProcess' ... – davioooh

+0

(동등성 대 동등성) 동일한 프로세스 ID/핸들을 사용하면 무엇을 찾겠습니까? –

+0

이 답변은 추측이며 실제로 (필요한 수정 이후에도) 작동하지 않습니다. pLight가 어떤 식 으로든 '재사용'되었다면 myOtherProcess는 null이됩니다. 그렇지 않습니다. – fractor

0

정확히 읽으면 ProcessStartInfo의 새 인스턴스를 만든 다음 실행중인 Process이 있으면 다시 사용합니다.

ProcessStartInfo 인스턴스를 지정하여 프로세스 리소스를 시작하려면이 오버로드를 사용하십시오. 과부하는 자원을 새 프로세스 구성 요소와 연관시킵니다. 프로세스가 이미 실행 중이면 추가 프로세스 리소스가 시작되지 않습니다. 대신, 기존 프로세스 자원이 재사용되고 새로운 Process 구성 요소가 작성되지 않습니다. 이 경우 새 Process 구성 요소를 반환하는 대신 Start는 호출 프로 시저에 null을 반환합니다.

http://msdn.microsoft.com/en-us/library/0w4h05yb.aspx (발언에서 첫 번째 줄)