2009-09-14 3 views
4

관련 질문 [stackoverflow] here.C#에서 임의의 응용 프로그램 열기

위 작업을 수행하려고하지만이 과정을 한 걸음 더 앞두고 싶습니다. 파일 형식에 대한 기본 편집기를 사용하여 임의의 파일을 열고 싶습니다. 그 시점부터 필자는 사용자가 정상적으로 파일을 사용하거나 내 응용 프로그램에서 계속 작업 할 수있게하려고합니다. 확장은 사용자가 편집을 마친 후에 발생합니다. 이벤트를 외부 응용 프로그램에서 가깝게 (그리고 이상적으로 저장하는) 캡처 할 수 있으며이를 다른 작업을 수행하기위한 방아쇠로 사용합니까? 필자의 목적을 위해 외부 응용 프로그램의 종료를 추적하면됩니다.

특정 경우에이를 수행 할 수 있습니다. 예를 들어 내 응용 프로그램에서 Word 인스턴스를 열고 응용 프로그램에 관련된 이벤트를 추적 할 수 있습니다. 그러나 Word에서 내 응용 프로그램의 연결을 끊고 싶습니다. 사용자가 원하는 문서 편집기를 사용하고 편집중인 파일의 저장소를 별도로 관리 할 수 ​​있습니다.

+0

실제 질문을 반영하도록 제목을 변경해야합니다. – SLaks

답변

3

당신은 참조 된 질문 유사한 방식으로이 작업을 수행 할 수 있지만 구문은 약간 다릅니다 : 다른 응용 프로그램이 닫힐 때까지

System.Diagnostics.Process process = new System.Diagnostics.Process(); 
process.StartInfo = 
    new System.Diagnostics.ProcessStartInfo("C:\...\...\myfile.html"); 
process.Start(); 
process.WaitForExit(); // this line is the key difference 

WaitForExit() 호출이 차단됩니다. 이 코드는 별도의 스레드에서 사용하므로 사용자는 그 동안 응용 프로그램을 계속 사용할 수 있습니다.

0

파일 변경 내용을 수신하려면 FileSystemWatcher을 사용하고 마지막으로 수정 한 날짜의 변경 내용을 수신 할 수 있습니다.

또한 프로세스를 모니터링하고 프로세스가 닫힐 때 파일을 검사 할 수 있습니다.

2

FileSystemWatcher class을 사용하여 파일 변경 사항을 확인하십시오.

편집 : 또한 프로그램이 종료 될 때 알아 내기 위해 Process 개체의 Exited 이벤트를 처리 할 수 ​​있습니다. 그러나 사용자가 파일을 닫지 만 프로세스를 종료하지 않는다는 사실을 알려주지는 않습니다. (Word에서 특히 그렇습니다).

+0

+1 Exited 이벤트를 처리하는 것이 WaitForExit를 사용하는 것보다 낫습니다. – MusiGenesis

0

나는 지금이 유용한 팁을 온라인에서 발견했습니다. 그것은 당신이 찾고있는 것 같다. This article (link broken)에는 C# 프로그래밍에 대한 더 자세한 정보와 유용한 팁이 있습니다.

string filename = "instruction.txt"; 
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(@filename); 

System.Diagnostics.Process rfp = new System.Diagnostics.Process(); 
rfp = System.Diagnostics.Process.Start(psi); 

rfp.WaitForExit(2000); 

if (rfp.HasExited) 
{ 
    System.IO.File.Delete(filename); 
} 

//execute other code after the program has closed 
MessageBox.ShowDialog("The program is done."); 
관련 문제