【问题标题】:NSIS doesn't backup all filesNSIS 不会备份所有文件
【发布时间】:2012-06-28 09:30:20
【问题描述】:

NSIS 安装程序会创建一个相当大的文件夹结构。当安装程序启动时,它会检查注册表以查看是否安装了当前版本...

然后它会询问您是否要备份当前文件夹。

它大部分时间都可以工作,但有时在备份旧版本时,它不会复制整个目录,而只会复制图标。

!insertmacro un.MoveFolder "$INSTDIR" "${BACKUP_FOLDER}" "*.*"

参考:http://nsis.sourceforge.net/MoveFileFolder

!insertmacro MoveFolder "$INSTDIR\[path\]source-folder[\]" "$INSTDIR\[path\]destination-folder[\]" "file-mask"

然后,它移动到删除部分...

会不会是没时间做呢?它在完成移动之前开始下一个过程?

还有什么可能导致它不复制整个文件夹?

在安装过程中,我看到了

Create folder c:\backup_folder
Moving files: c:\current_folder\*.* to c:\backup_folder\
Delete file: c:\current_folder\file1.........

最后,backup_folder 只有图标(不是所有文件)

编辑:解决方案 - 请在此处查看我的帖子 NSIS difficulty moving folders - $INSTDIR 确实是一个特殊文件夹,因此我不得不将卸载程序移动到 $TEMP 文件夹。

【问题讨论】:

    标签: backup nsis move


    【解决方案1】:

    有什么原因不能使用内置的CopyFiles 命令?

    要调试它,我建议您在.MoveFolder_Locate_moveFile 函数的顶部附近添加一个DetailPrint。如果您看到所有文件名都过去了,则问题出在该函数中的移动操作,如果没有,则问题出在此代码使用的 ${Locate} 宏中。

    另一种方法是使用Process Monitor...观察文件系统操作...

    【讨论】:

    • 当我查看进程监视器的输出时(很棒的工具!!!),我注意到 BACKUP_FOLDER 中每个文件夹的“创建文件”操作的“结果”是一个“名称碰撞”。这可能是问题所在,但我不明白。该文件夹以前不存在,我看不到任何重复的名称,程序正在以管理员权限运行...
    • 我认为问题在于我试图移动整个 INSTDIR(不是它的子目录) - 这可能吗?我很难弄清楚如何使用绝对路径名 - 从 INSTDIR 的名称构建 BACKUP_FOLDER 名称。是否可以将 INSTDIR 移动/重命名为 INSTDIR_120627 之类的名称?
    • $instdir 并不是很特别,它只是一个字符串; Messagebox mb_ok "$instdir\foo\bar" (但是如果你执行 setoutpath $instdir 那么windows会保持一个句柄打开(在备份操作之前使用 setoutpath $temp))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 2013-02-20
    相关资源
    最近更新 更多