卸载时保留用户文件夹

来源:互联网 发布:战争雷霆e100数据 编辑:程序博客网 时间:2024/04/30 22:58

 

;软件的使用过程,会产生一些由用户产生的数据,而软件卸载时,用户往往不希望卸载这些文件。
;以下实现了卸载除指定文件夹,文件以外的所有文件。
;
;delete dirs except one
;
Function un.RmDirsButSome
        ; exclude dir
        Exch $R0 
        Exch 1
        Exch $R1
        Exch 2
        Exch $R2
        Exch 3
        Exch $R3
        Exch 4
        Exch $R4

        ; route dir
        Exch 5
        Exch $R5
        Push $R6
        Push $R7

        ClearErrors
        FindFirst $R7 $R6 "$R5/*.*"
        IfErrors Exit

        Top:
        StrCmp $R6 "." Next
        StrCmp $R6 ".." Next
        StrCmp $R6 $R0 Next
        StrCmp $R6 $R1 Next
        StrCmp $R6 $R2 Next
        StrCmp $R6 $R3 Next
        StrCmp $R6 $R4 Next

        ;delete file or rm dir
        IfFileExists "$R5/$R6/*.*" IsDir IsFile
        IsDir:
        RmDir /r "$R5/$R6"
        IsFile:
        IfFileExists "$R5/$R6" 0 Next
        delete "$R5/$R6"
       #Goto Exit ;uncomment this to stop it being recursive (delete only one dir)

        Next:
        ClearErrors
        FindNext $R7 $R6
        IfErrors Exit
        Goto Top

        Exit:
        FindClose $R7

        Pop $R7
        Pop $R6
        Pop $R5
        Pop $R4
        Pop $R3
        Pop $R2
        Pop $R1
        Pop $R0
FunctionEnd
;
;删除除指定文件夹以外的文件宏
;还没有找到怎么实现不定参数的宏,这个实现只能保留最多五个文件或者文件夹,如果想保留更多的文件或者文件夹可以参照实现
;
;path--软件的安装路径
;path1--用户指定的保留文件夹或者文件
;path2--用户指定的保留文件夹或者文件
;path3--用户指定的保留文件夹或者文件
;path4--用户指定的保留文件夹或者文件
;path5--用户指定的保留文件夹或者文件
;
!macro RmDirsButSome path path1 path2 path3 path4 path5
        push ${path}
        push ${path1}
        push ${path2}
        push ${path3}
        push ${path4}
        push ${path5}
        call un.RmDirsButSome
!macroend
;
;调用,在卸载字段插入宏
;
!insertmacro RmDirsButSome $INSTDIR userItemlib userImage "other" "other" "other"
 
注意:
1. Function un.RmDirsButSome 这个函数是以un.funcname的方式命名的,因为函数是在卸载区段调用,只能是 un.开关;
2.找不到不定参数的宏,没能实现保留任意多个文件或者文件夹,如有需要可以对脚本进行修改;
3.实现参考了官方wiki的实现

 

原创粉丝点击