2010-01-29 7 views
10

을 발사하지 Process.Exited. 동일한 코드를 사용해도 대신 이미지를 시작하는 경우 :내가 다음 코드를 실행하면 항상

Process myProcess = new System.Diagnostics.Process(); 
myProcess.StartInfo.FileName = @"C:\Users\Public\Pictures\Sample Pictures\Desert.jpg"; 
myProcess.EnableRaisingEvents = true; 
myProcess.Exited += new System.EventHandler(Process_OnExit); 
myProcess.Start(); 

public static void Process_OnExit(object sender, EventArgs e) 
{ 
    // Delete the file on exit 
} 

이벤트가 발생하지 않습니다. 이미지를로드하는 프로세스가 절대로 닫히지 않기 때문입니까?

업데이트 : 시작하는 프로세스가 항상 이미지가 아닙니다. 그것은 무엇이든 될 수 있습니다 (pdf, 단어 문서 등). 어쩌면 내 접근 방식이 옳지 않을 수도 있습니다. 사용자가 프로세스를 종료 한 후 파일을 삭제하는 다른 방법이 있습니까?

감사합니다.

답변

7

임시 파일을 사용합니다. 임시 파일을 만드는 기능이 있습니다 ...

프로세스 자체가 부족하기 때문에 이벤트가 실행되지 않습니다. 문제의 문서를 "시작"하기 위해 셸을 사용할 수는 있지만 모든 유형의 파일에 대한 처리기가 있다는 것을 보장하지 않습니다. 창에 대한

+0

그래, 그게 그 과정에 문제가 있다고 생각해.도움을위한 Thx –

0

Microsoft Photo Viewer를 뷰어로 사용하여 이벤트가 발생합니다. 실제로 닫지 않은 뷰어를 사용하고 있습니까?

+2

이상한 일입니다. 필자는 Windows 7 및 Vista에서이 코드를 테스트했으며 이벤트가 발생하지 않습니다. 프로세스가 기본 Windows 사진 뷰어를 시작합니다. –

+0

이벤트가 시작되기 전에 프로그램이 종료되고 있습니까? – rerun

+0

아니요. 워드 파일로의 파일 경로에 대한 코드가 변경되면 해당 이벤트가 시작됩니다. 이것은 Windows Photo Viewer에서 실제로 발생하는 문제입니다. 어떤 운영 체제를 사용해 보셨습니까? –

1

이미지 파일을 실행할 수 없으므로 Windows에서 기본 이미지 뷰어를 사용하고 있습니다. XP 기본값을 사용하도록 코드를 변경했는데 정상적으로 작동했습니다.

class Program 
{ 
    static void Main(string[] args) 
    { 
     Process myProcess = new System.Diagnostics.Process(); 
     myProcess.StartInfo.FileName = @"rundll32.exe"; 
     myProcess.EnableRaisingEvents = true; 
     myProcess.StartInfo.Arguments = @"C:\winnt\System32\shimgvw.dll,ImageView_Fullscreen c:\leaf.jpg"; 
     myProcess.Exited += new System.EventHandler(Process_OnExit); 
     myProcess.Start(); 
     Console.Read(); 



    } 
    public static void Process_OnExit(object sender, EventArgs e) 
    { 
     Console.WriteLine("called"); 
     Console.Read(); 
    } 


} 
+1

불행히도, 나는 일반적인 방법이 필요합니다. 항상 이미지가 아닐 수도 있습니다. PDF, 단어 문서 등이 될 수 있습니다. 내 질문을 업데이트했습니다. –

4

미디어 플레이어는 이제 모두 Windows 7에서

15
이 제기 사용하도록 설정해야합니다

당신의 종료 이벤트를 줄 것이다이

myProcess.StartInfo.FileName = @"rundll32.exe"; 
myProcess.StartInfo.Arguments = @"C:\Windows\System32\shimgvw.dll,ImageView_Fullscreen " + yourfilepath; 

을 시도 윈도우 사진 뷰어를 들어 다음 코드

myProcess.StartInfo.FileName = "wmplayer"; 
myProcess.StartInfo.Arguments = "yourfilename"; 

시도 프로세스에 대한 이벤트.

process_name.EnableRaisingEvents = true; 
+3

그는 그의 코드에서했는데 –

+3

내 코드에서 이것을 잊어 버렸고이 대답이 나를 도왔다;) – ensisNoctis

관련 문제