C++ 将提升的文件移动到其他位置

C++ 将提升的文件移动到其他位置,c++,winapi,C++,Winapi,下面是一个场景。我正在为我的应用程序编写安装程序。问题出在这里。安装程序由用户提升为管理员 管理的进程当前正在运行。我的问题是,如何在文件运行时将其移动到其他位置?如果我尝试,我会得到错误“访问被拒绝”。。。显然,由于该文件已在使用中。需要注意的是,我要移动的文件本身就是文件。所以我可以将当前文件移动到另一个目录 所以我希望我的程序流程是这样的: request_admin_From_user() // done start_admin_elevated_process() // done mo

下面是一个场景。我正在为我的应用程序编写安装程序。问题出在这里。安装程序由用户提升为管理员

管理的进程当前正在运行。我的问题是,如何在文件运行时将其移动到其他位置?如果我尝试,我会得到错误“访问被拒绝”。。。显然,由于该文件已在使用中。需要注意的是,我要移动的文件本身就是文件。所以我可以将当前文件移动到另一个目录

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

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

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

  • 复制文件,然后稍后删除原件

  • 使用
    MOVEFILE\u DELAY\u UNTIL\u REBOOT
    标志计划延迟移动,以便在下一次操作系统重新启动时执行移动。这也可用于在重新启动时删除文件


  • “如何将管理进程移动到另一个位置?”这意味着什么?例如,管理进程当前正在运行。我的问题是,如何在文件运行时将其移动到其他位置?如果我尝试,我会得到错误“访问被拒绝”。。。显然,由于该文件已在使用中。需要注意的是,我要移动的文件本身就是文件。所以我可以将当前文件移动到另一个目录。那么你的安装程序需要将自己移动到目标文件夹吗?您可能只需要制作一个副本—通常不可能移动打开的文件。这与提升没有任何关系,但假设用户首先没有复制文件的权限?我如何在不请求管理员权限的情况下复制它?另外,请注意,我想将该文件复制到PROGRAMFILES目录中。在没有管理员权限的情况下,这怎么可能呢?如果安装程序被提升,那么它将能够复制到程序文件,但由于它正在运行,它将无法移动自身。