NSIS安裝程序創建一個相當大的文件夾結構。當安裝程序啓動時,它會檢查註冊表以查看是否安裝了當前版本...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_FOLDER中每個文件夾的操作都是」NAME COLLISION「。這可能是問題,但我不明白。該文件夾以前不存在,我看不到任何重複的名稱,該程序運行的管理員權限... – Thalia
我認爲問題是,我試圖移動整個INSTDIR(不是它的子目錄) - 是那可能嗎?我非常難以弄清楚如何使用絕對路徑名 - 從INSTDIR名稱構建BACKUP_FOLDER名稱。是否可以將INSTDIR移動/重命名爲INSTDIR_120627? – Thalia
$ instdir並不是特別的,它只是一個字符串; Messagebox mb_ok「$ instdir \ foo \ bar」(但是如果你執行setoutpath $ instdir,那麼windows會保持一個句柄打開(在備份操作之前使用setoutpath $ temp)) – Anders