2010-03-11 12 views
2

데이터베이스의 미리 컴파일 된 코드에서 직접 작성되는 .NET 어셈블리 DLL이 있습니다. DLL 파일을 만들고, 데이터를 넣고, Assembly 클래스로로드 한 다음 프로세스가 종료되면 해당 DLL을 삭제할 수 있습니까?소유자 프로세스가 종료 될 때 DLL을 삭제할 수있는 방법은 무엇입니까?

첫 번째 생각은 FILE_SHARE_DELETE 플래그로 열어서 Assembly.LoadFrom,으로로드하고 자동으로 삭제하도록했습니다.

LoadLibrary는 FILE_SHARE_DELETE 플래그로 파일을 열지 만 DLL이 여전히 메모리에 매핑되어 있으면 OS가 파일을 삭제하지 않습니다.

AppDomains을 사용하지 않고 프로세스가 종료되거나 외부에서 "대상 프로세스가 종료 된 후이 파일 삭제"실행 파일 (런타임시로드되는 .NET DLL은 사용자 입력에 따라 다름)을 제거하면 DLL을 어떻게 삭제할 수 있습니까? 어떤 종류의 프로세스 커뮤니케이션이 필요합니다. 나는 이것을 피하고 싶습니다). 당신이 어셈블리 &가 저장 컴파일되는 위치를 추적 할 경우

답변

0

아니, 그건 작동하지 않을 수 있습니다. CLR은 DLL에 메모리 매핑 된 파일 뷰를 생성하지만 뷰가 소멸 될 때까지는 삭제할 수 없습니다. AppDomain이 언로드 될 때까지는 발생하지 않습니다. 기본 AD에로드하고 있기 때문에 프로그램이 실행을 중지 할 때까지는 실행되지 않습니다.

주 프로그램을 시작하고 실행을 중지 한 후에 DLL을 삭제하는 도우미 프로세스는 광고를 사용하지 않으려 고 생각하는 모든 것입니다.

0

, 당신은 단지 (System.IO에 위치) 위치에 File.Delete을 사용할 수 있습니다

관련 문제