卸载时保留用户文件夹
来源:互联网 发布:战争雷霆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
;
;删除除指定文件夹以外的文件宏
;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
!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的实现
- 卸载时保留用户文件夹
- VS2010打包实现卸载过程中保留部分文件或者文件夹新版本替换旧版本
- 卸载ubuntu,保留windows
- linux下卸载oralce时,root用户执行$ORACLE_HOME/bin/localconfig delete提示不是文件或者文件夹
- Installshield打包的安装包卸载时如何保留部分文件不被卸载?
- 双系统卸载Win7保留xp
- 复制文件/文件夹时保留原始创建时间
- ASP.NET保留文件夹详解
- ASP.NET保留文件夹详解
- Android 系列 2.4用户旋转设备时保留数据
- 解决卸载时残留目标文件夹的问题
- 转: 双系统下卸载linux保留windows
- Update的卸载升级文件夹
- linux下打包文件夹(不保留路径)
- 清空一个文件夹下的内容,保留文件夹
- 修改用户文件夹
- win8转移用户文件夹
- 显示用户资源库文件夹
- 有用的地址汇总
- 26个Jquery使用小技巧(jQuery tips, tricks & solutions)
- oracle-sql基本操作1
- 006.设计模式之Singleto模式
- automake 生成目标, 关闭调试信息
- 卸载时保留用户文件夹
- 成大事必备9种能力、9种手段、9种心态分享
- linux下常用软件
- oracle中限制指定用户的连接数
- Linux设备驱动程序学习(1)-字符设备驱动程序
- 网络攻击之基于ARP欺骗的网络攻击程序源码
- tuxedo 错误号及错误信息描述
- Linux设备驱动程序学习(2)-调试技术
- UG/NX二次开发入门手册