C# 程序执行后解锁文件

C# 程序执行后解锁文件,c#,unlock,C#,Unlock,当我启动我的c程序时,我不能删除正在执行的文件 如何在执行后解锁程序集并允许用户删除我的文件?也许可以将组件复制到其他位置,然后执行它?但我认为这不是更好的方法。我认为您必须将程序集复制到临时位置并重新启动它。像这样的东西还没有测试过: public class Program { static void Main() { if (Array.IndexOf(Environment.GetCommandLineArgs(), "/unlocked") == -1) {

当我启动我的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...

        }
    }
}

无法删除文件,因为该文件本身是存储在内存中的程序代码的虚拟内存页的备份存储

当操作系统从内存中调出一页代码时,它不会进入页面文件,但会被丢弃,并在需要时从文件中加载回来


我想您可以强制程序以页文件为备份iirc,从可移动介质(如cdrom)执行的程序以页文件为备份,但最好的解决方案可能只是将程序集复制到另一个位置,正如您所建议的那样。

看看这一点,不完全相同,但类似:当文件完成执行时,用户应该可以删除它。我想你是在执行开始后询问的?因为执行后通常意味着程序退出后,正如Oded所指出的,这应该是微不足道的。。