Разблокировать файл после выполнения программы - PullRequest
0 голосов
/ 16 января 2012

Когда я запустил свою программу на c #, я не могу удалить исполняемый файл.

Как я могу просто разблокировать свою сборку после выполнения и дать пользователю возможность удалить мой файл? Может быть, скопировать сборку в другое место, а затем выполнить его? Но я думаю, что это не лучший способ.

Ответы [ 2 ]

0 голосов
/ 20 июня 2013

Вы не можете удалить свой файл, потому что сам файл является резервным хранилищем для страниц виртуальной памяти, которые содержат (в памяти) программный код.

Когда страница вашего кода выгружается из памяти операционной системой, она не попадает в файл подкачки, а просто удаляется и (при необходимости) загружается обратно из файла.

Полагаю, вы могли бы заставить программу сохранять файл подкачки (iirc, программы, выполняемые со съемного носителя, например cdrom, поддерживаются файлом подкачки), но, вероятно, лучшее решение - просто скопировать сборку в другое место, так какВы предложили.

0 голосов
/ 16 января 2012

Я думаю, вам придется скопировать вашу сборку во временную папку и перезапустить ее.Примерно так (еще не проверял):

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...

        }
    }
}
...