2012-01-15 3 views
0

내 C# 프로그램을 시작할 때 실행 파일을 삭제할 수 없습니다.프로그램 실행 후 파일 잠금 해제

어떻게 실행 후 어셈블리를 잠금 해제하고 사용자가 내 파일을 삭제할 수 있습니까? 어셈블리를 다른 장소에 복사 한 다음 실행하십시오. 그러나 나는 그것이 더 나은 방법이 아니라고 생각합니다.

+0

이 봐, 꽤 비슷하지만 비슷하지 않습니다 : http://stackoverflow.com/questions/1305428/self-deletable-application-in-c-sharp-in-one-executable – Alpha

+1

파일 실행이 완료되면 사용자는이를 삭제할 수 있어야합니다. – Oded

+0

"실행이 시작된 후"묻는다고 가정합니다. "실행 후"는 일반적으로 프로그램이 종료 된 후에 의미하므로 Oded가 지적한 것처럼 사소한 것이어야합니다. –

답변

0

어셈블리를 임시 위치로 복사하고 다시 실행해야합니다. 이런 식으로 뭔가가 (그것을 테스트하지 않은) : 파일 자체가 (메모리) 프로그램 코드를 보유하고있는 가상 메모리 페이지의 백업 저장소이기 때문에

public class Program { 
    static void Main() { 
     if (Array.IndexOf(Environment.GetCommandLineArgs(), "/unlocked") == -1) { 
      // We have not been launched by ourself! Copy the assembly to a temp location 
      // so the user can delete our original location. 
      string temp_location = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), Path.GetFileName(Application.ExecutablePath)); 
      File.Copy(Application.ExecutablePath, temp_location); 

      Process proc = new Process(); 
      proc.StartInfo.FileName = temp_location; 
      proc.StartInfo.Arguments = "/unlocked"; 
      proc.Start(); 

      // no more work in main, so application closes... 
     } else { 
      // else initialize application as normal... 

     } 
    } 
} 
0

당신은 당신의 파일을 삭제할 수 없습니다.

코드 페이지가 OS에 의해 메모리에서 페이지 아웃 될 때 페이지 파일로 이동하지 않지만 간단히 버리고 (필요한 경우) 파일에서 다시로드합니다.

프로그램을 페이지 파일로 백업 할 것을 강요 할 수 있다고 가정합니다. (iirc, cdrom과 같은 이동식 미디어에서 실행되는 프로그램은 페이지 파일을 지원합니다.)하지만, 최선의 해결책은 권장대로 어셈블리를 다른 위치에 복사하는 것입니다 .