Subversion Repositories Games.Chess Giants

Rev

Rev 133 | Rev 147 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 pmbaty 1
!include "MUI2.nsh"
2
!include "FileFunc.nsh"
3
 
4
!define PRODUCT_NAME "Chess Giants"
5
!define PUBLISHER "Pierre-Marie Baty"
6
!define PUBLISHER_WEBSITE "http://www.pmbaty.com/chess/"
7
!define INSTALLER_SRC "C:\Users\Pierre-Marie Baty\Documents\Mes projets\Chess Giants"
8
 
9
Name "${PRODUCT_NAME}"
19 pmbaty 10
BrandingText "${PRODUCT_NAME} by ${PUBLISHER} - ${PUBLISHER_WEBSITE}"
1 pmbaty 11
 
12
SetCompressor lzma
13
RequestExecutionLevel user
14
 
15
AllowRootDirInstall true
19 pmbaty 16
InstallDir "$LOCALAPPDATA\${PRODUCT_NAME}"
1 pmbaty 17
 
144 pmbaty 18
!define MUI_ICON "${INSTALLER_SRC}\installer\installer.ico"
1 pmbaty 19
!define MUI_HEADERIMAGE
144 pmbaty 20
!define MUI_HEADERIMAGE_BITMAP "${INSTALLER_SRC}\installer\installer.bmp"
21
!define MUI_WELCOMEFINISHPAGE_BITMAP "${INSTALLER_SRC}\installer\finish.bmp"
1 pmbaty 22
!define MUI_ABORTWARNING
23
 
24
!insertmacro MUI_PAGE_LICENSE "${INSTALLER_SRC}\License.txt"
25
!insertmacro MUI_PAGE_DIRECTORY
76 pmbaty 26
 
27
Var STR_HAYSTACK
28
Var STR_NEEDLE
29
Var STR_CONTAINS_VAR_1
30
Var STR_CONTAINS_VAR_2
31
Var STR_CONTAINS_VAR_3
32
Var STR_CONTAINS_VAR_4
33
Var STR_RETURN_VAR
144 pmbaty 34
Var LABEL_RESETCONFIG
35
Var CHECKBOX_RESETCONFIG
76 pmbaty 36
 
37
Function StrContains
38
		Exch $STR_NEEDLE
39
		Exch 1
40
		Exch $STR_HAYSTACK
41
		StrCpy $STR_RETURN_VAR ""
42
		StrCpy $STR_CONTAINS_VAR_1 -1
43
		StrLen $STR_CONTAINS_VAR_2 $STR_NEEDLE
44
		StrLen $STR_CONTAINS_VAR_4 $STR_HAYSTACK
45
	loop:
46
		IntOp $STR_CONTAINS_VAR_1 $STR_CONTAINS_VAR_1 + 1
47
		StrCpy $STR_CONTAINS_VAR_3 $STR_HAYSTACK $STR_CONTAINS_VAR_2 $STR_CONTAINS_VAR_1
48
		StrCmp $STR_CONTAINS_VAR_3 $STR_NEEDLE found
49
		StrCmp $STR_CONTAINS_VAR_1 $STR_CONTAINS_VAR_4 done
50
		Goto loop
51
	found:
52
		StrCpy $STR_RETURN_VAR $STR_NEEDLE
53
		Goto done
54
	done:
55
		Pop $STR_NEEDLE
56
		Exch $STR_RETURN_VAR  
57
FunctionEnd
58
!macro _StrContainsConstructor OUT NEEDLE HAYSTACK
59
		Push `${HAYSTACK}`
60
		Push `${NEEDLE}`
61
		Call StrContains
62
		Pop `${OUT}`
63
!macroend
64
 
65
!define StrContains '!insertmacro "_StrContainsConstructor"'
66
 
67
Function .onVerifyInstDir
68
		Push $R0
69
		Push $R1
70
		${StrContains} $0 "Program Files" "$INSTDIR"
71
		StrCmp $0 "Program Files" pathbad
72
		StrCpy $R0 "$INSTDIR"
73
	loop:
74
		StrLen $R1 "$R0"
75
		StrCmp $R1 0 pathbad
76
		IfFileExists "$R0" 0 parentLoop
77
		${GetFileAttributes} "$R0" "DIRECTORY" $R1
78
		StrCmp $R1 0 parentLoop
79
		${GetFileAttributes} "$R0" "READONLY" $R1
80
		StrCmp $R1 1 pathbad
81
		ClearErrors
82
		IfFileExists "$R0\.nsis_test_dir" pathgood 0
83
		CreateDirectory "$R0\.nsis_test_dir"
84
		IfErrors pathbad 0
85
		RMDir "$R0\.nsis_test_dir"
86
		Goto pathgood
87
	parentLoop:
88
		${GetParent} "$R0" "$R0"
89
		Goto loop
90
	pathbad:
91
		Abort
92
	pathgood:
93
		Pop $R1
94
		Pop $R0
95
FunctionEnd
96
 
144 pmbaty 97
Function MyFinishShow
98
		${NSD_CreateLabel} 120u 120u 60% 40u "If the program was previously installed, all your custom settings are preserved. If you want to reset them as well (for example, to fix a misconfiguration problem) then tick the following checkbox."
99
		Pop $LABEL_RESETCONFIG
100
		SetCtlColors $LABEL_RESETCONFIG "" "ffffff"
101
		${NSD_CreateCheckbox} 120u 165u 60% 10u "&Reset all program settings"
102
		Pop $CHECKBOX_RESETCONFIG
103
		SetCtlColors $CHECKBOX_RESETCONFIG "" "ffffff"
104
FunctionEnd
105
 
106
Function MyFinishLeave
107
		${NSD_GetState} $CHECKBOX_RESETCONFIG $0
108
		${If} $0 <> 0
109
			; if asked to, reset the configuration file
110
			Delete "$INSTDIR\config.ini"
111
		${EndIf}
112
FunctionEnd
113
 
1 pmbaty 114
;!insertmacro MUI_PAGE_COMPONENTS
115
!insertmacro MUI_PAGE_INSTFILES
73 pmbaty 116
AutoCloseWindow true
1 pmbaty 117
 
118
!insertmacro MUI_UNPAGE_CONFIRM
119
!insertmacro MUI_UNPAGE_INSTFILES
120
 
144 pmbaty 121
!define MUI_FINISHPAGE_RUN "$INSTDIR\${PRODUCT_NAME}.exe"
122
!define MUI_PAGE_CUSTOMFUNCTION_SHOW MyFinishShow
123
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE MyFinishLeave
124
!insertmacro MUI_PAGE_FINISH
125
 
1 pmbaty 126
!insertmacro MUI_LANGUAGE "English"
127
!insertmacro MUI_LANGUAGE "French"
128
 
129
Section ""
130
	SetOutPath "$INSTDIR"
131
 
144 pmbaty 132
	; erase old files
133
	RMDir /r "$INSTDIR\data"
134
	RMDir /r "$INSTDIR\engines"
135
	RMDir /r "$INSTDIR\helpfiles"
136
	; RMDir /r "$INSTDIR\themes"; -- keep user themes
137
 
133 pmbaty 138
	; deploy our files
1 pmbaty 139
	File /r "${INSTALLER_SRC}\data"
44 pmbaty 140
	File /r "${INSTALLER_SRC}\engines"
1 pmbaty 141
	File /r "${INSTALLER_SRC}\helpfiles"
142
	File /r "${INSTALLER_SRC}\themes"
143
	File "${INSTALLER_SRC}\*.pgn"
144
	File "${INSTALLER_SRC}\${PRODUCT_NAME}.exe"
145
	File "${INSTALLER_SRC}\${PRODUCT_NAME}.exe.manifest"
29 pmbaty 146
	File "${INSTALLER_SRC}\Chess Giants (English).html"
147
	File "${INSTALLER_SRC}\Chess Giants (French).html"
144 pmbaty 148
	; File "${INSTALLER_SRC}\config.ini" -- config.ini shall be created on-the-fly
149
 
1 pmbaty 150
	File "${INSTALLER_SRC}\materials.cfg"
151
	File "${INSTALLER_SRC}\d3dx9_42.dll"
152
	File "${INSTALLER_SRC}\msvcr90.dll"
117 pmbaty 153
	File "${INSTALLER_SRC}\openal32.dll"
118 pmbaty 154
	File "${INSTALLER_SRC}\wrap_oal.dll"
1 pmbaty 155
 
133 pmbaty 156
	; create Start menu shortcuts
1 pmbaty 157
	CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\${PRODUCT_NAME}.exe" "" "" "" "" "" "Start a chess game"
158
	CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}"
159
	CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\${PRODUCT_NAME}.exe" "" "" "" "" "" "Start a chess game"
29 pmbaty 160
	CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Documentation (English).lnk" "$INSTDIR\Chess Giants (English).html" "" "" "" "" "" "Read the software documentation in English"
161
	CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Documentation (Français).lnk" "$INSTDIR\Chess Giants (French).html" "" "" "" "" "" "Read the software documentation in French"
1 pmbaty 162
 
133 pmbaty 163
	; associate .pgn files with Chess Giants
1 pmbaty 164
	WriteRegStr HKCU "Software\Classes\.pgn" "" "ChessGiantsPGN"
165
	WriteRegStr HKCU "Software\Classes\ChessGiantsPGN" "" "Portable Game Notation"
166
;	WriteRegStr HKCU "Software\Classes\ChessGiantsPGN\DefaultIcon" "" "$INSTDIR\${PRODUCT_NAME}.exe,1"
167
	WriteRegStr HKCU "Software\Classes\ChessGiantsPGN\shell\open\command" "" '"$INSTDIR\${PRODUCT_NAME}.exe" "%1"'
168
 
133 pmbaty 169
	; associate .fen files with Chess Giants
1 pmbaty 170
	WriteRegStr HKCU "Software\Classes\.fen" "" "ChessGiantsFEN"
171
	WriteRegStr HKCU "Software\Classes\ChessGiantsFEN" "" "Forsyth-Edwards Notation"
172
;	WriteRegStr HKCU "Software\Classes\ChessGiantsFEN\DefaultIcon" "" "$INSTDIR\${PRODUCT_NAME}.exe,1"
173
	WriteRegStr HKCU "Software\Classes\ChessGiantsFEN\shell\open\command" "" '"$INSTDIR\${PRODUCT_NAME}.exe" "%1"'
174
 
133 pmbaty 175
	; create a proper uninstaller
1 pmbaty 176
	WriteUninstaller $INSTDIR\uninstall.exe
177
	WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "DisplayName" "${PRODUCT_NAME}"
55 pmbaty 178
	WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "DisplayIcon" "$INSTDIR\${PRODUCT_NAME}.exe,0"
1 pmbaty 179
	WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\""
180
	WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S"
181
	WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "Publisher" "${PUBLISHER}"
182
	WriteRegDWORD HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "NoModify" 1
183
	WriteRegDWORD HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "NoRepair" 1
184
	${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2
185
	IntFmt $0 "0x%08X" $0
186
	WriteRegDWORD HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "EstimatedSize" "$0"
73 pmbaty 187
 
144 pmbaty 188
	; the program was installed successfully, ask it to delete the installer by writing a little registry key
133 pmbaty 189
	WriteRegStr HKCU "Software\Chess Giants" "InstallerPath" "$EXEPATH"
1 pmbaty 190
SectionEnd
14 pmbaty 191
 
1 pmbaty 192
Section "Uninstall"
193
	DeleteRegKey HKCU "Software\Classes\.pgn"
194
	DeleteRegKey HKCU "Software\Classes\ChessGiantsPGN"
195
	DeleteRegKey HKCU "Software\Classes\.fen"
196
	DeleteRegKey HKCU "Software\Classes\ChessGiantsFEN"
197
 
198
	Delete "$DESKTOP\${PRODUCT_NAME}.lnk"
199
	RMDir /r "$SMPROGRAMS\${PRODUCT_NAME}"
200
	RMDir /r "$INSTDIR"
201
 
202
	DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
203
SectionEnd