程序执行后解锁文件
本文关键字:文件 解锁 执行 程序 | 更新日期: 2023-09-27 18:20:26
当我启动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等可移动媒体执行的程序使用页面文档备份),但最好的解决方案可能只是将程序集复制到另一个位置,正如你所建议的那样。