【问题标题】:how to move files on reboot in nsis如何在 nsis 中重新启动时移动文件
【发布时间】:2021-06-01 17:20:18
【问题描述】:

我需要在重新启动时将文件从源移动到目标。尝试了以下3种方法都失败了

IfFileExists  "$Temp\test.dll" 0 new_installation 
    StrCpy $ALREADY_INSTALLED 1
        new_installation:
        SetOverwrite on
        !insertmacro InstallLib DLL $ALREADY_INSTALLED REBOOT_PROTECTED "$Temp\test.dll" "$WINDIR\test.dll" "$WINDIR"

System::Call "kernel32::MoveFileEx(t '$TEMP\test.dll', t '$WINDIR\test.dll', i 5)"

Rename /REBOOTOK '$TEMP\test.dll' `$WINDIR\test.dll`

【问题讨论】:

  • 您实际上要替换哪个文件?

标签: nsis reboot


【解决方案1】:

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

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

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

根据this answer,进程监视器启动日志在重命名操作开始之前处于活动状态,因此您可以使用它来查看它是否提供了有关操作失败原因的任何线索...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    相关资源
    最近更新 更多