程序执行后解锁文件

时间:2012-01-15 21:33:18

标签: c# unlock

当我启动我的c#程序时,我无法删除执行文件。

如何在执行后解锁我的程序集并让用户删除我的文件?也许将程序集复制到其他地方然后执行它?但我认为这不是更好的方式。

2 个答案:

答案 0 :(得分: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...

        }
    }
}

答案 1 :(得分:0)

您无法删除文件,因为文件本身是保存(在内存中)程序代码的虚拟内存页面的后备存储。

当您的代码页面被操作系统从内存中分页时,它不会转到页面文件,但它会被丢弃并(在需要时)从文件中加载回来。

我想你可以强制程序被页面文件支持(iirc,从像cdrom这样的可移动媒体执行的程序是页面文件支持的),但是最好的解决方案就是将程序集复制到另一个位置,如你所建议的那样。