-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmake_installer.nsi
133 lines (109 loc) · 3.51 KB
/
make_installer.nsi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
!include LogicLib.nsh
!include MUI2.nsh
!define VERSION "0.1"
!define APPNAME "Biostata"
!define EXENAME ${APPNAME}.exe
OutFile "biostata-v${VERSION}-win32.exe"
InstallDir $PROGRAMFILES32\${APPNAME}
!macro VerifyUserIsAdmin
UserInfo::GetAccountType
pop $0
${If} $0 != "admin" ;Require admin rights on NT4+
messageBox mb_iconstop "Administrator rights required!"
setErrorLevel 740 ;ERROR_ELEVATION_REQUIRED
quit
${EndIf}
!macroend
Function .onInit
setShellVarContext all
!insertmacro VerifyUserIsAdmin
FunctionEnd
Function un.RMDirUP
!define RMDirUP '!insertmacro RMDirUPCall'
!macro RMDirUPCall _PATH
push '${_PATH}'
Call un.RMDirUP
!macroend
; $0 - current folder
ClearErrors
Exch $0
;DetailPrint "ASDF - $0\.."
RMDir "$0\.."
IfErrors Skip
${RMDirUP} "$0\.."
Skip:
Pop $0
FunctionEnd
Function un.onInit
SetShellVarContext all
#Verify the uninstaller - last chance to back out
MessageBox MB_OKCANCEL "Remove ${APPNAME}?" IDOK next
Abort
next:
!insertmacro VerifyUserIsAdmin
FunctionEnd
RequestExecutionLevel admin
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
Section "install"
SetOutPath $INSTDIR
# copy program files
File /a /r "dist\biostata\"
# Create program data directory
SetShellVarContext all
ReadEnvStr $1 PROGRAMDATA
!define DTDIR "$1\Biostata"
${IfNot} ${FileExists} "${DTDIR}\*.*"
CreateDirectory "${DTDIR}"
${EndIf}
AccessControl::GrantOnFile "${DTDIR}" "(S-1-5-32-545)" "FullAccess"
# Create initial rc file with paths to excel and notepad
# Only if this file does not exist
${IfNot} ${FileExists} "${DTDIR}\.biostatarc"
DetailPrint "Creating initial rc file at ${DTDIR}\.biostatarc"
# detect excel
!define EXCEL_PATH ""
ClearErrors
ReadRegStr $2 HKLM "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\excel.exe" ""
IfErrors SkipExcel
!define /redef EXCEL_PATH $2
DetailPrint "Excel was found at ${EXCEL_PATH}"
SkipExcel:
FileOpen $3 "${DTDIR}\.biostatarc" w
FileWrite $3 "<BiostataOptions version=$\"${VERSION}$\">$\r$\n"
FileWrite $3 " <EXTERNAL>$\r$\n"
FileWrite $3 " <XLSX>${EXCEL_PATH}</XLSX>$\r$\n"
FileWrite $3 " <TXT>notepad.exe</TXT>$\r$\n"
FileWrite $3 " </EXTERNAL>$\r$\n"
FileWrite $3 "</BiostataOptions>"
FileClose $3
${EndIf}
# create a file which links to a program data folder
FileOpen $4 "$INSTDIR\config.txt" w
FileWrite $4 "datadir: ${DTDIR}"
FileClose $4
# Shortcuts for bin files. Places ico file to bin directory
File /oname=biostata.ico resources\biostata256.ico
!define /redef ShortcutIcon $INSTDIR\biostata.ico
CreateDirectory "$SMPROGRAMS\${APPNAME}"
CreateShortCut "$SMPROGRAMS\${APPNAME}\${APPNAME}.lnk" \
"$INSTDIR\${EXENAME}" "" "${ShortcutIcon}" ""
# uninstaller
WriteUninstaller $INSTDIR\Uninstall.exe
CreateShortCut "$SMPROGRAMS\${APPNAME}\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
SectionEnd
Section "Uninstall"
# Remove Start Menu launcher
delete "$SMPROGRAMS\${APPNAME}\${APPNAME}.lnk"
delete "$SMPROGRAMS\${APPNAME}\Uninstall.lnk"
rmDir "$SMPROGRAMS\${APPNAME}"
# Remove files
RMDir /r "$INSTDIR"
${RMDirUP} "$INSTDIR" ;remove parents (if each is empty ONLY)
delete "$INSTDIR\${APPNAME}.lnk"
# Always delete uninstaller as the last action
delete "$INSTDIR\Uninstall.exe"
# Try to remove the install directory - this will only happen if it is empty
rmDir $INSTDIR
SectionEnd