2015-10-14 12:06:50 +02:00
|
|
|
;-----------------------------------------------------------------------------------------------
|
|
|
|
; Generate list of files and directories for uninstaller with command line support (/? for help)
|
2015-10-14 15:27:13 +02:00
|
|
|
; Create installer and use like external program that generate list of files.
|
2015-10-14 12:06:50 +02:00
|
|
|
;
|
|
|
|
; 2006 Shengalts Aleksander aka Instructor (Shengalts@mail.ru)
|
|
|
|
;-----------------------------------------------------------------------------------------------
|
|
|
|
; - added file filter as command option
|
|
|
|
; 2005 Patrick Graf (patrick.graf@gmx.net)
|
|
|
|
;-----------------------------------------------------------------------------------------------
|
|
|
|
; - combine unList and unListDate to one script
|
|
|
|
; 2005 Matei "Ambient.Impact" Stanca (ambient.impact@rogers.com)
|
|
|
|
;-----------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
Name "unList v1.5"
|
|
|
|
OutFile "unList.exe"
|
|
|
|
Caption "$(^Name)"
|
|
|
|
SubCaption 2 " "
|
|
|
|
SubCaption 3 " "
|
|
|
|
|
|
|
|
!include "FileFunc.nsh"
|
|
|
|
!insertmacro GetTime
|
|
|
|
!insertmacro GetParameters
|
|
|
|
!insertmacro GetOptions
|
|
|
|
!insertmacro GetExePath
|
|
|
|
|
|
|
|
!include "TextFunc.nsh"
|
|
|
|
!insertmacro FileReadFromEnd
|
|
|
|
!insertmacro FileJoin
|
|
|
|
!insertmacro TrimNewLines
|
|
|
|
|
|
|
|
!include "Sections.nsh"
|
|
|
|
|
|
|
|
Var DATE
|
|
|
|
Var FILEFILTER
|
|
|
|
Var LOG
|
|
|
|
Var PREFIX
|
|
|
|
Var UNDIR_VAR
|
|
|
|
Var MB
|
|
|
|
Var RADIOBUTTON
|
|
|
|
|
|
|
|
DirText '$\nSetup will generate list of files and directories for uninstaller.'\
|
|
|
|
'Source Folder'
|
|
|
|
Page directory
|
|
|
|
Page components
|
|
|
|
Page instfiles
|
|
|
|
|
|
|
|
Section "unList" unList
|
|
|
|
StrCpy $DATE '0'
|
|
|
|
call main
|
|
|
|
SectionEnd
|
|
|
|
|
|
|
|
Section /o "unListDate" unListDate
|
|
|
|
StrCpy $DATE '1'
|
|
|
|
call main
|
|
|
|
SectionEnd
|
|
|
|
|
|
|
|
Function .onSelChange
|
|
|
|
!insertmacro StartRadioButtons $RADIOBUTTON
|
|
|
|
!insertmacro RadioButton ${unList}
|
|
|
|
!insertmacro RadioButton ${unListDate}
|
|
|
|
!insertmacro EndRadioButtons
|
|
|
|
FunctionEnd
|
|
|
|
|
|
|
|
Function .onInit
|
|
|
|
StrCpy $RADIOBUTTON ${unList}
|
|
|
|
${GetExePath} $EXEDIR
|
|
|
|
${GetParameters} $R0
|
|
|
|
StrCmp $R0 '/?' +2
|
|
|
|
StrCmp $R0 '-?' 0 GetOptions
|
|
|
|
|
|
|
|
MessageBox MB_OK \
|
|
|
|
`| Command line options:$\n\
|
|
|
|
| $\n\
|
|
|
|
| /DATE=[0|1] Only files not modified after installation are deleted$\n\
|
|
|
|
| default: 0$\n\
|
|
|
|
| /INSTDIR=[path] Get file list from this path$\n\
|
|
|
|
| default: [exe directory]$\n\
|
|
|
|
| /FILTER=[*.*] Only files matching the given filter are added$\n\
|
|
|
|
| default: *.*$\n\
|
|
|
|
| /LOG=[file] Ouput file list$\n\
|
|
|
|
| default: unList.txt$\n\
|
|
|
|
| /PREFIX=[text] Insert text (spaces) at the beginning$\n\
|
|
|
|
| default: empty$\n\
|
|
|
|
| /UNDIR_VAR=[$$var] Uninstall directory variable$\n\
|
|
|
|
| default: $$INSTDIR$\n\
|
|
|
|
| /MB=[1|0] Show or not MessageBoxes$\n\
|
|
|
|
| default: 1$\n\
|
|
|
|
$\n\
|
|
|
|
$\n\
|
|
|
|
Example:$\n\
|
|
|
|
unList.exe /DATE=1 /INSTDIR=C:\a /LOG=C:\a.log /PREFIX=" " /UNDIR_VAR=$$R0`
|
|
|
|
quit
|
|
|
|
|
|
|
|
GetOptions:
|
|
|
|
${GetOptions} '$R0' '/DATE=' $R1
|
|
|
|
StrCmp $R1 '' 0 +3
|
|
|
|
StrCpy $DATE '0'
|
|
|
|
Goto +2
|
|
|
|
StrCpy $DATE $R1
|
|
|
|
|
|
|
|
${GetOptions} '$R0' '/INSTDIR=' $R1
|
|
|
|
StrCmp $R1 '' 0 +3
|
|
|
|
StrCpy $INSTDIR '$EXEDIR'
|
|
|
|
goto +2
|
|
|
|
StrCpy $INSTDIR $R1
|
|
|
|
|
|
|
|
${GetOptions} '$R0' '/FILTER=' $R1
|
|
|
|
StrCmp $R1 '' 0 +3
|
|
|
|
StrCpy $FILEFILTER '*.*'
|
|
|
|
goto +2
|
|
|
|
StrCpy $FILEFILTER $R1
|
|
|
|
|
|
|
|
${GetOptions} '$R0' '/LOG=' $R1
|
|
|
|
StrCmp $R1 '' 0 +3
|
|
|
|
StrCpy $LOG 'unList.txt'
|
|
|
|
goto +2
|
|
|
|
StrCpy $LOG $R1
|
|
|
|
|
|
|
|
${GetOptions} '$R0' '/PREFIX=' $R1
|
|
|
|
StrCmp $R1 '' 0 +3
|
|
|
|
StrCpy $PREFIX ''
|
|
|
|
goto +2
|
|
|
|
StrCpy $PREFIX $R1
|
|
|
|
|
|
|
|
${GetOptions} '$R0' '/UNDIR_VAR=' $R1
|
|
|
|
StrCmp $R1 '' 0 +3
|
|
|
|
StrCpy $UNDIR_VAR '$$INSTDIR'
|
|
|
|
goto +2
|
|
|
|
StrCpy $UNDIR_VAR $R1
|
|
|
|
|
|
|
|
${GetOptions} '$R0' '/MB=' $R1
|
|
|
|
StrCmp $R1 '' 0 +3
|
|
|
|
StrCpy $MB '1'
|
|
|
|
goto +2
|
|
|
|
StrCpy $MB $R1
|
|
|
|
|
|
|
|
StrCmp $R0 '' +2
|
|
|
|
call main
|
|
|
|
FunctionEnd
|
|
|
|
|
|
|
|
Function main
|
|
|
|
ClearErrors
|
|
|
|
SearchPath $INSTDIR $INSTDIR
|
|
|
|
IfErrors error
|
|
|
|
StrLen $R5 $INSTDIR
|
|
|
|
IntOp $R5 $R5 + 1
|
|
|
|
|
|
|
|
InitPluginsDir
|
|
|
|
GetTempFileName $R1 $PLUGINSDIR
|
|
|
|
GetTempFileName $R2 $PLUGINSDIR
|
|
|
|
GetTempFileName $R3 $PLUGINSDIR
|
|
|
|
ExpandEnvStrings $R0 %COMSPEC%
|
|
|
|
|
|
|
|
nsExec::Exec '"$R0" /C DIR "$INSTDIR\$FILEFILTER" /A-D /B /S /ON>"$R1"'
|
|
|
|
FileOpen $R4 $R2 w
|
|
|
|
${FileReadFromEnd} '$R1' FilesCallback
|
|
|
|
FileClose $R4
|
|
|
|
|
|
|
|
nsExec::Exec '"$R0" /C DIR "$INSTDIR\*.*" /AD /B /S /ON>"$R1"'
|
|
|
|
FileOpen $R4 $R3 w
|
|
|
|
${FileReadFromEnd} '$R1' DirectoriesCallback
|
|
|
|
FileClose $R4
|
|
|
|
|
|
|
|
${FileJoin} '$R2' '$R3' '$R2'
|
|
|
|
Delete '$EXEDIR\$LOG'
|
|
|
|
Rename $R2 '$EXEDIR\$LOG'
|
|
|
|
IfErrors 0 success
|
|
|
|
Delete $LOG
|
|
|
|
Rename $R2 $LOG
|
|
|
|
IfErrors 0 success
|
|
|
|
|
|
|
|
error:
|
|
|
|
StrCmp $MB 0 quit
|
|
|
|
HideWindow
|
|
|
|
MessageBox MB_OK|MB_ICONEXCLAMATION 'error'
|
|
|
|
quit
|
|
|
|
|
|
|
|
success:
|
|
|
|
StrCmp $MB 0 quit
|
|
|
|
HideWindow
|
|
|
|
MessageBox MB_OK|MB_ICONINFORMATION '"$LOG" was successfully generated'
|
|
|
|
|
|
|
|
quit:
|
|
|
|
quit
|
|
|
|
FunctionEnd
|
|
|
|
|
|
|
|
Function FilesCallback
|
|
|
|
System::Call 'user32::OemToChar(t r9, t .r9)'
|
|
|
|
${TrimNewLines} '$9' $9
|
|
|
|
|
|
|
|
StrCmp $DATE '0' 0 unListDate
|
|
|
|
StrCpy $9 $9 '' $R5
|
|
|
|
FileWrite $R4 `$PREFIXDelete "$UNDIR_VAR\$9"$\r$\n`
|
|
|
|
goto end
|
|
|
|
|
|
|
|
unListDate:
|
|
|
|
${GetTime} '$9' 'M' $0 $1 $2 $3 $4 $5 $6
|
|
|
|
|
|
|
|
StrCpy $3 '$${'
|
|
|
|
StrCpy $9 $9 '' $R5
|
|
|
|
FileWrite $R4 `$PREFIX$3un.GetTime} "$UNDIR_VAR\$9" "M" $$0 $$1 $$2 $$3 $$4 $$5 $$6$\r$\n`
|
|
|
|
FileWrite $R4 `$PREFIXIfErrors +5$\r$\n`
|
|
|
|
FileWrite $R4 `$PREFIXStrCmp "$$0/$$1/$$2-$$4:$$5:$$6" "$0/$1/$2-$4:$5:$6" 0 +3$\r$\n`
|
|
|
|
FileWrite $R4 `$PREFIXDelete "$UNDIR_VAR\$9"$\r$\n`
|
|
|
|
FileWrite $R4 `$PREFIXgoto +2$\r$\n`
|
|
|
|
FileWrite $R4 `$PREFIXDetailPrint "Not deleted: $UNDIR_VAR\$9"$\r$\n$\r$\n`
|
|
|
|
|
|
|
|
end:
|
|
|
|
Push 0
|
|
|
|
FunctionEnd
|
|
|
|
|
|
|
|
Function DirectoriesCallback
|
|
|
|
System::Call 'user32::OemToChar(t r9, t .r9)'
|
|
|
|
${TrimNewLines} '$9' $9
|
|
|
|
StrCpy $9 $9 '' $R5
|
|
|
|
|
|
|
|
FileWrite $R4 `$PREFIXRMDir "$UNDIR_VAR\$9"$\r$\n`
|
|
|
|
|
|
|
|
Push 0
|
|
|
|
FunctionEnd
|