将提升的文件移动到另一个位置

Move elevated file to another location

情况是这样的。我正在为我的应用程序编写安装程序。这就是问题所在。安装程序由用户提升为管理员。

admin 进程目前是 运行。我的问题是,当文件为 运行 时,如何将其移动到另一个位置?如果我尝试,我会收到错误 "Access is denied" ...显然是因为该文件已在使用中。重要的是要注意我要移动的文件本身。就像我可以获取当前文件并将其自身移动到另一个目录一样。

所以我希望我的程序流程是这样的:

request_admin_From_user() // done
start_admin_elevated_process() // done
move_admin_process_to_another_directory() // how? if the process is running..

进程在 运行 时无法 移动 自己的 .exe 文件,但它可以:

  1. 复制文件,稍后删除原文件。

  2. 使用 MoveFileEx()MOVEFILE_DELAY_UNTIL_REBOOT 标志安排延迟移动,以便在下一次 OS 重新启动时执行移动。这也可用于在重新启动时删除文件。