2012-01-15 11 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のようなリムーバブルメディアから実行されるプログラムはページファイルにバックアップされている)ようにすることをお勧めしますが、おそらく最良の解決策は、 。

関連する問題