2009-01-28 3 views
1

Outlook 개인 폴더에 액세스하는 win 응용 프로그램을 만들고 있습니다. 내부적으로 Outlook 인스턴스에 개인 폴더를 탑재하고 메일을 처리 한 다음 pst를 마운트 해제합니다. pst를 마운트 해제 한 후 해당 파일을 삭제합니다.Outlook pst 파일에서 메모리를 해제 할 때 문제가 발생했습니다.

이제 문제는 pst를 마운트 해제하고 메모리를 해제 한 후에도 pst를 삭제하려고하면 일부 프로세스가이 파일을 사용하여 삭제할 수 없다는 예외가 발생한다는 것입니다. 그리고 그 과정은 전망입니다. 나는 유엔 마운트에 다음 코드를 사용하여 메모리를 해제하고 :

_application.Session.RemoveStore(_personalFolder); 
while (System.Runtime.InteropServices.Marshal.ReleaseComObject(_personalFolder) >= 0) ; 
_personalFolder = null; 

내가 그것을 여러 번 확인하고 메모리를 해제하는 데 시간이 걸리고 명확한 시간이 거기없는 것처럼 보인다. 파일을 삭제하는 방법을 도와 줄 수 있습니까?

답변

1

KB234228 ("OL97: Outlook .pst File Lock Release Interval Now Configurable")을 살펴보십시오. Outlook 97에 관한 내용이지만 여전히 작동하는 것으로 추측됩니다.

"exclusive lock released"이벤트가 없기 때문에 FileSystemWatcher이 도움이되지 않을 것입니다.

대기열에 넣은 모든 .pst 파일을 계속 삭제하려고하는 작업자 스레드를 만들 수 있습니다. 이렇게하면 응용 프로그램 UI를 최소한 중단없이 계속 사용할 수 있습니다.

ProcMon과 같은 도구에는 응용 프로그램의 파일 핸들을 볼 수있는 기능이 있습니다. 어쩌면 당신은 Oulook 프로세스에 대해 그렇게 할 수있는 API 호출을 할 수 있습니다 (다른 SO 질문에 대한 좋은 자료입니다). 이렇게하면 파일 시스템을 폴링 할 필요가 없으며 잠금이 해제 될 때 더 빨리 작동 할 수 있습니다.

감히, 문제의 파일 핸들을 즉시 닫고 폴링/대기를 모두하지 않아도됩니다.

관련 문제