如何在nsis中重新启动时移动文件



我需要在重新启动时将文件从源移动到目标。尝试了以下3种方法,但均未通过

IfFileExists  "$Temptest.dll" 0 new_installation 
StrCpy $ALREADY_INSTALLED 1
new_installation:
SetOverwrite on
!insertmacro InstallLib DLL $ALREADY_INSTALLED REBOOT_PROTECTED "$Temptest.dll" "$WINDIRtest.dll" "$WINDIR"
System::Call "kernel32::MoveFileEx(t '$TEMPtest.dll', t '$WINDIRtest.dll', i 5)"
Rename /REBOOTOK '$TEMPtest.dll' `$WINDIRtest.dll`

我们在其他地方确认您对MoveFileEx的直接调用成功。这应该意味着重命名操作已经记录在注册表中。您可以使用SysInternal中的PendMoves工具对此进行确认。同一页面还提供了一个MoveFile工具,您可以尝试一下。

假设操作已经记录,您应该调查文件操作在引导过程中可能失败的原因:

  • 一个或两个文件都是只读的
  • 安全描述符(ACL(阻止移动和/或删除操作
  • 您试图替换的文件是受保护的系统文件
  • 文件被系统或驱动程序锁定

根据这个答案,Process Monitor引导日志记录在重命名操作开始前处于活动状态,因此您可以使用它来查看它是否提供了操作失败原因的任何线索。。。

最新更新