私のC#プログラムを起動したとき、実行中のファイルを削除できません。プログラムの実行後にファイルをロック解除する
実行後にアセンブリをロック解除して、ファイルを削除する可能性があるのはなぜですか?アセンブラを他の場所にコピーして実行するかもしれませんか?しかし、私はそれが良い方法ではないと思う。
私のC#プログラムを起動したとき、実行中のファイルを削除できません。プログラムの実行後にファイルをロック解除する
実行後にアセンブリをロック解除して、ファイルを削除する可能性があるのはなぜですか?アセンブラを他の場所にコピーして実行するかもしれませんか?しかし、私はそれが良い方法ではないと思う。
私はあなたのアセンブリを一時的な場所にコピーして再起動する必要があると思います。このような何か(それをテストしていない):
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...
}
}
}
ファイル自体が(メモリ内の)プログラムコードを保持する仮想メモリページのバッキングストアですので、あなたはあなたのファイルを削除することはできません。
OSによってメモリからページングされたページは、ページファイルには移動しませんが、単純に破棄され、必要に応じてファイルから読み込まれます。
私はプログラムをページファイルにバックアップする(iirc、cdromのようなリムーバブルメディアから実行されるプログラムはページファイルにバックアップされている)ようにすることをお勧めしますが、おそらく最良の解決策は、 。
これを見て、全く同じではありませんが類似していません:http://stackoverflow.com/questions/1305428/self-deletable-application-in-c-sharp-in-one-executable – Alpha
ファイル実行が終了すると、ユーザーはそれを削除できるはずです。 – Oded
「実行開始後」と聞いていると思いますか? 「実行後」とは、通常、プログラムが終了した後を意味するため、Odedが指摘しているように些細なはずです。 –