2011-03-24 3 views
1

Windows에서 프로그램이나 다른 프로세스에서 파일을 사용할 때 파일을 삭제할 수있는 방법이 있습니까? 나는 이것을 찾아서 다음 두 가지 방법으로 찾았습니다 :Windows에서 사용하는 파일을 삭제하는 방법은 무엇입니까?

1- Using RunOnce key in Registry; Windows를 다시 시작하거나 다른 것을 기다리는 것을 원하지 않기 때문에 이것을 사용하지 않을 것입니다 ... 온타임을 선호합니다!

2-이 페이지에서 선언 된 방법을 사용하십시오 : http://www.delphipages.com/forum/showthread.php?t=201190 여기의 문제는 NT 창에서 유용합니다. 모든 Windows에서 작동하는 방법이 필요합니다!

감사합니다.

+3

옵션 2는 재부팅을 기다립니다. 98/ME 지원을 정말로 원하십니까? 파일이 열려있는 동안에는 파일을 삭제할 수 없습니다. 너는 네가 파일을 열면 실망하고 네가 끝내기 전에 다른 사람이 그 파일을 지웠다. –

+1

** 현재 사용중인 파일 **을 삭제 하시겠습니까? ** 재부팅 할 때까지 기다릴 수 없습니까? –

+1

참고 : MoveFileEx (... MOVEFILE_DELAY_UNTIL_REBOOT) 메서드는 사용자에게 관리자 권한이있는 경우에만 작동하며, 그렇지 않은 경우 ACCESS_DENIED –

답변

4

여기의 문제는 NT 창에서 유용합니다. 모든 Windows에서 작동하는 방법이 필요합니다!

모든 최신 데스크톱 Windows (XP, Vista, 7)도 NT입니다. NT < 4 또는 Win98을 사용해야합니까? 아니면 심지어 CE/모바일/전화 승? 아마도 그렇지 않습니다.

열려있는 파일을 즉시 삭제해야하는 경우 디버거 권한을 사용하여 각 프로세스에 연결하고 파일에 핸들이 열려 있는지 확인한 다음 파일 아래 핸들을 닫습니다. Process Explorer를 사용하여 수동으로 수행 할 수 있습니다. 많은 응용 프로그램은 파일이 닫히는 것에 잘 반응하지 않습니다. 그들이 죽은 손잡이로 무언가를하려고 할 때 예외를 겪을 것을 기대하십시오.

불행하게도 Windows에서 디스크의 파일 이름 아래에 저장되는 것과는 독립적으로 파일 핸들에 첨부 된 Unix 스타일 파일을 가질 수있는 옵션이 없습니다.

+0

잘 .. 이것은 당신이 붙인 응용 프로그램에 많은 문제를 야기 할 것이다. 옳은 일. –

+1

실제로, 그것은 거의 없습니다. 누출을 처리하거나 (Explorer! 포함) 또는 맬웨어를 죽이는 응용 프로그램을 다루는 데 유용 할 수 있지만 일상적인 도구는 아닙니다. – bobince

+0

전적으로 동의합니다. –

1

MOVEFILE_DELAY_UNTIL_REBOOT 플래그와 함께 MoveFileEx을 시도하십시오. 다시 부팅 할 때까지 작업 이동 또는 삭제를 연기합니다.

: 유일한 옵션을 다시 시작하지 않으려는 경우 해당 핸들을 닫는 것입니다. ProcessExplorer 그 일을하고 항상 작동하며 충돌하는 프로세스를 보지 못했습니다. 프로세스의 열거 핸들에 대한 자세한 정보는 http://www.codeguru.com/forum/archive/index.php/t-176997.html입니다. 그러나 시스템의 모든 프로세스를 열거하고 Vista +에서 다르게 동작해야한다는 것을 신중하게 명심하십시오 (승격해야합니다)

+0

-1을 반환합니다. Windows 재부팅 대기 상태입니다. –

+0

그러나 그가 원하는 것은 실제로 할 수 없기 때문에 이것은 도움이됩니다. –

+0

여기를 참고하십시오 : http://stackoverflow.com/questions/14530252/how-can-i-copy-replace-a-dll –

1

누군가가 파일을 사용하고 있으면 파일을 삭제할 수 없습니다. 얼마나 열심히 노력 하든지, 창은 당신을 내버려 두지 않을 것입니다. 일부 파일에서는 작동하지만 일반적으로 작동하지 않습니다. 아무도 파일을 사용하지 않을 때 삭제를 연기 할 수 있습니다. 다음과 같이 할 수 있습니다 :

1 - RunOnce를 사용합니다. 그러나 원하지 않습니다.
2 - 루프를 기다리면서 파일을 삭제하려고합니다. 의사 코드 :

DeleteFile 
Check if you was able to delete or if file still exists. 
if you are able to delete, then exit loop. 

이것이 최선이며, 내가 기억할 수있는 것입니다.

+0

왜 사람들은 설명없이 -1을 주죠? 나는 내 대답에 무엇이 잘못되었는지 알고 싶다. –

+0

왜 +1할까요? 이 루프를 사용하면 재부팅 할 때까지 기다릴 수 있습니다. OP는 순진한 루프가 아니라 액션이 필요합니다. 그래서 그가 할 수있는 최선이 아닙니다. 그래서 위의 솔루션에 대한 투표는 –

+2

순진한 루프가 아닙니다. 그는 기능에 타임 아웃을 추가 할 수 있기 때문에 루프에 영원히 붙어있을 필요가 없습니다. 곧 또는 나중에 응용 프로그램이 파일을 열어 파일을 닫으면 루프가 파일을 삭제할 수 있습니다. 또한 다른 앱을 닫지 않는 것이 좋습니다. –

-1

일부 프로세스의 핸들이 열려있어 파일이 잠길 가능성이 큽니다. 이는 파일을 삭제하거나 이동할 때 가장 일반적인 이유입니다. Access denied

정말 무딘 방법은 그 핸들을 닫는 것입니다.

Handles tool from SysInternals (소스도 다운로드 할 수 있습니다.)이를 수행 할 수 있습니다. 성공적으로 사용했습니다.

참고 1 : 관리자 권한이 있어야 사용 가능합니다.

참고 2 : 다른 프로세스에서 핸들을 닫는 것은 매우 무례한 것으로 간주되어 프로세스가 불안정해질 수 있습니다.

+0

OP가 이미 많은 것을 확립했다고 생각합니다. 문제를 다시 말하면서입니다. 해결책은 무엇입니까? –

+0

해결 방법은 해당 파일의 핸들을 강제로 닫는 것입니다. –

+0

타사 응용 프로그램 사용? 질문은 수동으로하지 않고 코드를 작성하는 것이 었습니다. 물론 핸들을 닫아야합니다. 상식 부분입니다. 어쨌든 저는 왜 당신이 투표에 실패했다고 생각하는지 설명하려고했습니다. –

관련 문제