]> git.proxmox.com Git - mirror_smartmontools-debian.git/blame - os_win32/installer.nsi
Imported Upstream version 5.42+svn3561
[mirror_smartmontools-debian.git] / os_win32 / installer.nsi
CommitLineData
4d59bff9 1;
cfbba5b9 2; smartmontools install NSIS script
4d59bff9 3;
cfbba5b9 4; Home page of code is: http://smartmontools.sourceforge.net
4d59bff9 5;
f4e463df 6; Copyright (C) 2006-12 Christian Franke <smartmontools-support@lists.sourceforge.net>
4d59bff9 7;
cfbba5b9
GI
8; This program is free software; you can redistribute it and/or modify
9; it under the terms of the GNU General Public License as published by
10; the Free Software Foundation; either version 2, or (at your option)
11; any later version.
4d59bff9 12;
cfbba5b9
GI
13; You should have received a copy of the GNU General Public License
14; (for example COPYING); If not, see <http://www.gnu.org/licenses/>.
15;
f4e463df 16; $Id: installer.nsi 3545 2012-05-25 21:19:03Z chrfranke $
4d59bff9
GG
17;
18
19
20;--------------------------------------------------------------------
21; Command line arguments:
f4e463df
GI
22; makensis -DINPDIR=<input-dir> -DINPDIR64=<input-dir-64-bit> \
23; -DOUTFILE=<output-file> -DVERSTR=<version-string> installer.nsi
4d59bff9
GG
24
25!ifndef INPDIR
26 !define INPDIR "."
27!endif
28
29!ifndef OUTFILE
30 !define OUTFILE "smartmontools.win32-setup.exe"
31!endif
32
33;--------------------------------------------------------------------
34; General
35
36Name "smartmontools"
37OutFile "${OUTFILE}"
38
39SetCompressor /solid lzma
40
41XPStyle on
42InstallColors /windows
43
f4e463df
GI
44; Set in .onInit
45;InstallDir "$PROGRAMFILES\smartmontools"
46;InstallDirRegKey HKLM "Software\smartmontools" "Install_Dir"
d008864d
GI
47
48Var EDITOR
f4e463df
GI
49
50!ifdef INPDIR64
51 Var X64
52 Var INSTDIR32
53 Var INSTDIR64
54!endif
4d59bff9
GG
55
56LicenseData "${INPDIR}\doc\COPYING.txt"
57
a7e8ffec
GI
58!include "FileFunc.nsh"
59!include "Sections.nsh"
60
61!insertmacro GetParameters
62!insertmacro GetOptions
63
64RequestExecutionLevel admin
65
4d59bff9
GG
66;--------------------------------------------------------------------
67; Pages
68
69Page license
70Page components
f4e463df
GI
71!ifdef INPDIR64
72 Page directory CheckX64
73!else
74 Page directory
75!endif
4d59bff9
GG
76Page instfiles
77
78UninstPage uninstConfirm
79UninstPage instfiles
80
81InstType "Full"
82InstType "Extract files only"
a37e7145 83InstType "Drive menu"
4d59bff9
GG
84
85
86;--------------------------------------------------------------------
87; Sections
88
f4e463df
GI
89!ifdef INPDIR64
90 Section "64-bit version (EXPERIMENTAL)" X64_SECTION
91 ; Handled in Function CheckX64
92 SectionEnd
93!endif
94
a37e7145 95SectionGroup "!Program files"
4d59bff9 96
f4e463df
GI
97 !macro FileExe path option
98 !ifdef INPDIR64
99 ; Use dummy SetOutPath to control archive location of executables
100 StrCmp $X64 "" +5
101 Goto +2
102 SetOutPath "$INSTDIR\bin64"
103 File ${option} '${INPDIR64}\${path}'
104 GoTo +4
105 Goto +2
106 SetOutPath "$INSTDIR\bin"
107 File ${option} '${INPDIR}\${path}'
108 !else
109 File ${option} '${INPDIR}\${path}'
110 !endif
111 !macroend
112
a37e7145 113 Section "smartctl" SMARTCTL_SECTION
4d59bff9
GG
114
115 SectionIn 1 2
116
117 SetOutPath "$INSTDIR\bin"
f4e463df 118 !insertmacro FileExe "bin\smartctl.exe" ""
4d59bff9
GG
119
120 SectionEnd
121
a37e7145 122 Section "smartd" SMARTD_SECTION
4d59bff9
GG
123
124 SectionIn 1 2
125
126 SetOutPath "$INSTDIR\bin"
a37e7145
GG
127
128 ; Stop service ?
129 StrCpy $1 ""
130 IfFileExists "$INSTDIR\bin\smartd.exe" 0 nosrv
131 ReadRegStr $0 HKLM "System\CurrentControlSet\Services\smartd" "ImagePath"
132 StrCmp $0 "" nosrv
133 ExecWait "net stop smartd" $1
134 nosrv:
f4e463df 135 !insertmacro FileExe "bin\smartd.exe" ""
4d59bff9
GG
136
137 IfFileExists "$INSTDIR\bin\smartd.conf" 0 +2
138 MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 "Replace existing configuration file$\n$INSTDIR\bin\smartd.conf ?" IDYES 0 IDNO +2
139 File "${INPDIR}\doc\smartd.conf"
140
f4e463df
GI
141 IfFileExists "$WINDIR\system32\cmd.exe" 0 nosysl
142 !insertmacro FileExe "bin\syslogevt.exe" /nonfatal
143 nosysl:
4d59bff9 144
a37e7145
GG
145 ; Restart service ?
146 StrCmp $1 "0" 0 +3
147 MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 "Restart smartd service ?" IDYES 0 IDNO +2
148 ExecWait "net start smartd"
149
4d59bff9
GG
150 SectionEnd
151
2127e193
GI
152 Section "smartctl-nc (GSmartControl)" SMARTCTL_NC_SECTION
153
154 SectionIn 1 2
155
156 SetOutPath "$INSTDIR\bin"
f4e463df 157 !insertmacro FileExe "bin\smartctl-nc.exe" ""
2127e193
GI
158
159 SectionEnd
160
cfbba5b9
GI
161 Section "drivedb.h (Drive Database)" DRIVEDB_SECTION
162
163 SectionIn 1 2
164
165 SetOutPath "$INSTDIR\bin"
166 File "${INPDIR}\bin\drivedb.h"
167 File "${INPDIR}\bin\update-smart-drivedb.exe"
168
169 SectionEnd
170
4d59bff9
GG
171SectionGroupEnd
172
a37e7145 173Section "!Documentation" DOC_SECTION
4d59bff9
GG
174
175 SectionIn 1 2
176
177 SetOutPath "$INSTDIR\doc"
178 File "${INPDIR}\doc\AUTHORS.txt"
179 File "${INPDIR}\doc\CHANGELOG.txt"
180 File "${INPDIR}\doc\COPYING.txt"
181 File "${INPDIR}\doc\INSTALL.txt"
182 File "${INPDIR}\doc\NEWS.txt"
183 File "${INPDIR}\doc\README.txt"
184 File "${INPDIR}\doc\TODO.txt"
185 File "${INPDIR}\doc\WARNINGS.txt"
f4e463df
GI
186!ifdef INPDIR64
187 StrCmp $X64 "" +3
188 File "${INPDIR64}\doc\checksums64.txt"
189 GoTo +2
190 File "${INPDIR}\doc\checksums32.txt"
191!else
192 File "${INPDIR}\doc\checksums??.txt"
193!endif
4d59bff9
GG
194 File "${INPDIR}\doc\smartctl.8.html"
195 File "${INPDIR}\doc\smartctl.8.txt"
196 File "${INPDIR}\doc\smartd.8.html"
197 File "${INPDIR}\doc\smartd.8.txt"
198 File "${INPDIR}\doc\smartd.conf"
199 File "${INPDIR}\doc\smartd.conf.5.html"
200 File "${INPDIR}\doc\smartd.conf.5.txt"
201
202SectionEnd
203
a37e7145 204Section "Uninstaller" UNINST_SECTION
4d59bff9
GG
205
206 SectionIn 1
f4e463df 207 AddSize 40
4d59bff9
GG
208
209 CreateDirectory "$INSTDIR"
210
211 ; Save installation location
212 WriteRegStr HKLM "Software\smartmontools" "Install_Dir" "$INSTDIR"
213
214 ; Write uninstall keys and program
215 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "DisplayName" "smartmontools"
2127e193
GI
216!ifdef VERSTR
217 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "DisplayVersion" "${VERSTR}"
218!endif
a37e7145 219 ;WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "Publisher" "smartmontools"
4d59bff9 220 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "UninstallString" '"$INSTDIR\uninst-smartmontools.exe"'
a37e7145
GG
221 ;WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "URLInfoAbout" "http://smartmontools.sourceforge.net/"
222 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "HelpLink" "http://smartmontools.sourceforge.net/"
223 ;WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "URLUpdateInfo" "http://sourceforge.net/project/showfiles.php?group_id=64297"
224 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "URLUpdateInfo" "http://smartmontools-win32.dyndns.org/"
4d59bff9
GG
225 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "NoModify" 1
226 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "NoRepair" 1
227 WriteUninstaller "uninst-smartmontools.exe"
228
229SectionEnd
230
a37e7145 231Section "Start Menu Shortcuts" MENU_SECTION
4d59bff9
GG
232
233 SectionIn 1
234
a7e8ffec
GI
235 SetShellVarContext all
236
4d59bff9
GG
237 CreateDirectory "$SMPROGRAMS\smartmontools"
238
d008864d
GI
239 !macro CreateAdminShortCut link target args
240 CreateShortCut '${link}' '${target}' '${args}'
241 push '${link}'
242 Call ShellLinkSetRunAs
243 !macroend
244
245 ; runcmdu
246 IfFileExists "$INSTDIR\bin\smartctl.exe" 0 +2
f4e463df 247 IfFileExists "$INSTDIR\bin\smartd.exe" 0 noruncmd
d008864d 248 SetOutPath "$INSTDIR\bin"
f4e463df 249 !insertmacro FileExe "bin\runcmdu.exe" ""
d008864d 250 File "${INPDIR}\bin\runcmdu.exe.manifest"
f4e463df 251 noruncmd:
d008864d 252
4d59bff9
GG
253 ; smartctl
254 IfFileExists "$INSTDIR\bin\smartctl.exe" 0 noctl
255 SetOutPath "$INSTDIR\bin"
d008864d
GI
256 IfFileExists "$WINDIR\system32\cmd.exe" 0 nocmd
257 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartctl (Admin CMD).lnk" "$WINDIR\system32\cmd.exe" '/k PATH=$INSTDIR\bin;%PATH%&cd /d "$INSTDIR\bin"'
258 nocmd:
4d59bff9
GG
259 CreateDirectory "$SMPROGRAMS\smartmontools\smartctl Examples"
260 FileOpen $0 "$SMPROGRAMS\smartmontools\smartctl Examples\!Read this first!.txt" "w"
a37e7145 261 FileWrite $0 "All the example commands in this directory$\r$\napply to the first drive (sda).$\r$\n"
4d59bff9 262 FileClose $0
d008864d
GI
263 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartctl Examples\All info (-a).lnk" "$INSTDIR\bin\runcmdu.exe" "smartctl -a sda"
264 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartctl Examples\Identify drive (-i).lnk" "$INSTDIR\bin\runcmdu.exe" "smartctl -i sda"
265 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartctl Examples\SMART attributes (-A).lnk" "$INSTDIR\bin\runcmdu.exe" "smartctl -A sda"
266 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartctl Examples\SMART capabilities (-c).lnk" "$INSTDIR\bin\runcmdu.exe" "smartctl -c sda"
267 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartctl Examples\SMART health status (-H).lnk" "$INSTDIR\bin\runcmdu.exe" "smartctl -H sda"
268 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartctl Examples\SMART error log (-l error).lnk" "$INSTDIR\bin\runcmdu.exe" "smartctl -l error sda"
269 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartctl Examples\SMART selftest log (-l selftest).lnk" "$INSTDIR\bin\runcmdu.exe" "smartctl -l selftest sda"
270 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartctl Examples\Start long selftest (-t long).lnk" "$INSTDIR\bin\runcmdu.exe" "smartctl -t long sda"
271 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartctl Examples\Start offline test (-t offline).lnk" "$INSTDIR\bin\runcmdu.exe" "smartctl -t offline sda"
272 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartctl Examples\Start short selftest (-t short).lnk" "$INSTDIR\bin\runcmdu.exe" "smartctl -t short sda"
273 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartctl Examples\Stop(Abort) selftest (-X).lnk" "$INSTDIR\bin\runcmdu.exe" "smartctl -X sda"
274 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartctl Examples\Turn SMART off (-s off).lnk" "$INSTDIR\bin\runcmdu.exe" "smartctl -s off sda"
275 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartctl Examples\Turn SMART on (-s on).lnk" "$INSTDIR\bin\runcmdu.exe" "smartctl -s on sda"
4d59bff9
GG
276 noctl:
277
278 ; smartd
279 IfFileExists "$INSTDIR\bin\smartd.exe" 0 nod
280 SetOutPath "$INSTDIR\bin"
4d59bff9 281 CreateDirectory "$SMPROGRAMS\smartmontools\smartd Examples"
d008864d
GI
282 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartd Examples\Daemon start, smartd.log.lnk" "$INSTDIR\bin\runcmdu.exe" "smartd -l local0"
283 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartd Examples\Daemon start, eventlog.lnk" "$INSTDIR\bin\runcmdu.exe" "smartd"
284 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartd Examples\Daemon stop.lnk" "$INSTDIR\bin\runcmdu.exe" "smartd stop"
285 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartd Examples\Do all tests once (-q onecheck).lnk" "$INSTDIR\bin\runcmdu.exe" "smartd -q onecheck"
286 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartd Examples\Debug mode (-d).lnk" "$INSTDIR\bin\runcmdu.exe" "smartd -d"
287 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartd Examples\smartd.conf (edit).lnk" "$EDITOR" "$INSTDIR\bin\smartd.conf"
288 CreateShortCut "$SMPROGRAMS\smartmontools\smartd Examples\smartd.conf (view).lnk" "$EDITOR" "$INSTDIR\bin\smartd.conf"
289 CreateShortCut "$SMPROGRAMS\smartmontools\smartd Examples\smartd.log (view).lnk" "$EDITOR" "$INSTDIR\bin\smartd.log"
4d59bff9
GG
290
291 ; smartd service (not on 9x/ME)
292 IfFileExists "$WINDIR\system32\cmd.exe" 0 nosvc
d008864d
GI
293 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartd Examples\Service install, eventlog, 30min.lnk" "$INSTDIR\bin\runcmdu.exe" "smartd install"
294 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartd Examples\Service install, smartd.log, 10min.lnk" "$INSTDIR\bin\runcmdu.exe" "smartd install -l local0 -i 600"
295 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartd Examples\Service install, smartd.log, 30min.lnk" "$INSTDIR\bin\runcmdu.exe" "smartd install -l local0"
296 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartd Examples\Service remove.lnk" "$INSTDIR\bin\runcmdu.exe" "smartd remove"
297 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartd Examples\Service start.lnk" "$INSTDIR\bin\runcmdu.exe" "net start smartd"
298 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartd Examples\Service stop.lnk" "$INSTDIR\bin\runcmdu.exe" "net stop smartd"
4d59bff9
GG
299 nosvc:
300 nod:
301
302 ; Documentation
303 IfFileExists "$INSTDIR\doc\README.TXT" 0 nodoc
304 SetOutPath "$INSTDIR\doc"
305 CreateDirectory "$SMPROGRAMS\smartmontools\Documentation"
306 CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\smartctl manual page (html).lnk" "$INSTDIR\doc\smartctl.8.html"
307 CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\smartd manual page (html).lnk" "$INSTDIR\doc\smartd.8.html"
308 CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\smartd.conf manual page (html).lnk" "$INSTDIR\doc\smartd.conf.5.html"
309 CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\smartctl manual page (txt).lnk" "$INSTDIR\doc\smartctl.8.txt"
310 CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\smartd manual page (txt).lnk" "$INSTDIR\doc\smartd.8.txt"
311 CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\smartd.conf manual page (txt).lnk" "$INSTDIR\doc\smartd.conf.5.txt"
d008864d
GI
312 CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\smartd.conf sample.lnk" "$EDITOR" "$INSTDIR\doc\smartd.conf"
313 IfFileExists "$INSTDIR\bin\drivedb.h" 0 nodb
314 CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\drivedb.h (view).lnk" "$EDITOR" "$INSTDIR\bin\drivedb.h"
315 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\Documentation\drivedb-add.h (create, edit).lnk" "$EDITOR" "$INSTDIR\bin\drivedb-add.h"
316 nodb:
4d59bff9
GG
317 CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\AUTHORS.lnk" "$INSTDIR\doc\AUTHORS.txt"
318 CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\CHANGELOG.lnk" "$INSTDIR\doc\CHANGELOG.txt"
319 CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\COPYING.lnk" "$INSTDIR\doc\COPYING.txt"
320 CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\INSTALL.lnk" "$INSTDIR\doc\INSTALL.txt"
321 CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\NEWS.lnk" "$INSTDIR\doc\NEWS.txt"
322 CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\README.lnk" "$INSTDIR\doc\README.txt"
323 CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\TODO.lnk" "$INSTDIR\doc\TODO.txt"
324 CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\WARNINGS.lnk" "$INSTDIR\doc\WARNINGS.txt"
a37e7145 325 CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\Windows version download page.lnk" "http://smartmontools-win32.dyndns.org/smartmontools/"
4d59bff9
GG
326 nodoc:
327
328 ; Homepage
329 CreateShortCut "$SMPROGRAMS\smartmontools\smartmontools Home Page.lnk" "http://smartmontools.sourceforge.net/"
330
cfbba5b9 331 ; drivedb.h update
d008864d
GI
332 IfFileExists "$INSTDIR\bin\update-smart-drivedb.exe" 0 noupdb
333 SetOutPath "$INSTDIR\bin"
334 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\drivedb.h update.lnk" "$INSTDIR\bin\update-smart-drivedb.exe" ""
335 noupdb:
cfbba5b9 336
4d59bff9 337 ; Uninstall
d008864d
GI
338 IfFileExists "$INSTDIR\uninst-smartmontools.exe" 0 noinst
339 SetOutPath "$INSTDIR"
340 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\Uninstall smartmontools.lnk" "$INSTDIR\uninst-smartmontools.exe" ""
341 noinst:
4d59bff9
GG
342
343SectionEnd
344
a37e7145 345Section "Add install dir to PATH" PATH_SECTION
4d59bff9
GG
346
347 SectionIn 1
348
349 IfFileExists "$WINDIR\system32\cmd.exe" 0 +3
350 Push "$INSTDIR\bin"
351 Call AddToPath
352
353SectionEnd
354
a37e7145
GG
355SectionGroup "Add smartctl to drive menu"
356
357!macro DriveMenuRemove
358 DetailPrint "Remove drive menu entries"
359 DeleteRegKey HKCR "Drive\shell\smartctl0"
360 DeleteRegKey HKCR "Drive\shell\smartctl1"
361 DeleteRegKey HKCR "Drive\shell\smartctl2"
362 DeleteRegKey HKCR "Drive\shell\smartctl3"
363 DeleteRegKey HKCR "Drive\shell\smartctl4"
364 DeleteRegKey HKCR "Drive\shell\smartctl5"
365!macroend
366
a7e8ffec 367 Section "Remove existing entries first" DRIVE_REMOVE_SECTION
a37e7145
GG
368 SectionIn 3
369 !insertmacro DriveMenuRemove
370 SectionEnd
371
372!macro DriveSection id name args
373 Section 'smartctl ${args} ...' DRIVE_${id}_SECTION
374 SectionIn 3
d008864d 375 Call CheckRunCmdA
a37e7145
GG
376 DetailPrint 'Add drive menu entry "${name}": smartctl ${args} ...'
377 WriteRegStr HKCR "Drive\shell\smartctl${id}" "" "${name}"
d008864d 378 WriteRegStr HKCR "Drive\shell\smartctl${id}\command" "" '"$INSTDIR\bin\runcmda.exe" "$INSTDIR\bin\smartctl.exe" ${args} %L'
a37e7145
GG
379 SectionEnd
380!macroend
381
382 !insertmacro DriveSection 0 "SMART all info" "-a"
383 !insertmacro DriveSection 1 "SMART status" "-Hc"
384 !insertmacro DriveSection 2 "SMART attributes" "-A"
385 !insertmacro DriveSection 3 "SMART short selftest" "-t short"
386 !insertmacro DriveSection 4 "SMART long selftest" "-t long"
387 !insertmacro DriveSection 5 "SMART continue selective selftest" '-t "selective,cont"'
388
389SectionGroupEnd
390
4d59bff9
GG
391;--------------------------------------------------------------------
392
393Section "Uninstall"
394
a37e7145
GG
395 ; Stop & remove service
396 IfFileExists "$INSTDIR\bin\smartd.exe" 0 nosrv
397 ReadRegStr $0 HKLM "System\CurrentControlSet\Services\smartd" "ImagePath"
398 StrCmp $0 "" nosrv
399 ExecWait "net stop smartd"
400 MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 "Remove smartd service ?" IDYES 0 IDNO nosrv
401 ExecWait "$INSTDIR\bin\smartd.exe remove"
402 nosrv:
403
404 ; Remove installer registry keys
4d59bff9
GG
405 DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools"
406 DeleteRegKey HKLM "Software\smartmontools"
407
cfbba5b9 408 ; Remove conf file ?
4d59bff9
GG
409 IfFileExists "$INSTDIR\bin\smartd.conf" 0 noconf
410 ; Assume unchanged if timestamp is equal to sample file
411 GetFileTime "$INSTDIR\bin\smartd.conf" $0 $1
412 GetFileTime "$INSTDIR\doc\smartd.conf" $2 $3
413 StrCmp "$0:$1" "$2:$3" +2 0
414 MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 "Delete configuration file$\n$INSTDIR\bin\smartd.conf ?" IDYES 0 IDNO noconf
415 Delete "$INSTDIR\bin\smartd.conf"
416 noconf:
417
cfbba5b9 418 ; Remove log file ?
4d59bff9
GG
419 IfFileExists "$INSTDIR\bin\smartd.log" 0 +3
420 MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 "Delete log file$\n$INSTDIR\bin\smartd.log ?" IDYES 0 IDNO +2
421 Delete "$INSTDIR\bin\smartd.log"
422
cfbba5b9
GI
423 ; Remove drivedb-add file ?
424 IfFileExists "$INSTDIR\bin\drivedb-add.h" 0 +3
425 MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 "Delete local drive database file$\n$INSTDIR\bin\drivedb-add.h ?" IDYES 0 IDNO +2
426 Delete "$INSTDIR\bin\drivedb-add.h"
427
4d59bff9
GG
428 ; Remove files
429 Delete "$INSTDIR\bin\smartctl.exe"
2127e193 430 Delete "$INSTDIR\bin\smartctl-nc.exe"
4d59bff9
GG
431 Delete "$INSTDIR\bin\smartd.exe"
432 Delete "$INSTDIR\bin\syslogevt.exe"
cfbba5b9
GI
433 Delete "$INSTDIR\bin\drivedb.h"
434 Delete "$INSTDIR\bin\drivedb.h.error"
435 Delete "$INSTDIR\bin\drivedb.h.lastcheck"
436 Delete "$INSTDIR\bin\drivedb.h.old"
437 Delete "$INSTDIR\bin\update-smart-drivedb.exe"
4d59bff9
GG
438 Delete "$INSTDIR\bin\smartctl-run.bat"
439 Delete "$INSTDIR\bin\smartd-run.bat"
440 Delete "$INSTDIR\bin\net-run.bat"
d008864d
GI
441 Delete "$INSTDIR\bin\runcmda.exe"
442 Delete "$INSTDIR\bin\runcmda.exe.manifest"
443 Delete "$INSTDIR\bin\runcmdu.exe"
444 Delete "$INSTDIR\bin\runcmdu.exe.manifest"
4d59bff9
GG
445 Delete "$INSTDIR\doc\AUTHORS.txt"
446 Delete "$INSTDIR\doc\CHANGELOG.txt"
447 Delete "$INSTDIR\doc\COPYING.txt"
448 Delete "$INSTDIR\doc\INSTALL.txt"
449 Delete "$INSTDIR\doc\NEWS.txt"
450 Delete "$INSTDIR\doc\README.txt"
451 Delete "$INSTDIR\doc\TODO.txt"
452 Delete "$INSTDIR\doc\WARNINGS.txt"
f4e463df 453 Delete "$INSTDIR\doc\checksums*.txt"
4d59bff9
GG
454 Delete "$INSTDIR\doc\smartctl.8.html"
455 Delete "$INSTDIR\doc\smartctl.8.txt"
456 Delete "$INSTDIR\doc\smartd.8.html"
457 Delete "$INSTDIR\doc\smartd.8.txt"
458 Delete "$INSTDIR\doc\smartd.conf"
459 Delete "$INSTDIR\doc\smartd.conf.5.html"
460 Delete "$INSTDIR\doc\smartd.conf.5.txt"
461 Delete "$INSTDIR\uninst-smartmontools.exe"
462
463 ; Remove shortcuts
a7e8ffec 464 SetShellVarContext all
4d59bff9
GG
465 Delete "$SMPROGRAMS\smartmontools\*.*"
466 Delete "$SMPROGRAMS\smartmontools\Documentation\*.*"
467 Delete "$SMPROGRAMS\smartmontools\smartctl Examples\*.*"
468 Delete "$SMPROGRAMS\smartmontools\smartd Examples\*.*"
469
470 ; Remove folders
471 RMDir "$SMPROGRAMS\smartmontools\Documentation"
a37e7145
GG
472 RMDir "$SMPROGRAMS\smartmontools\smartctl Examples"
473 RMDir "$SMPROGRAMS\smartmontools\smartd Examples"
4d59bff9
GG
474 RMDir "$SMPROGRAMS\smartmontools"
475 RMDir "$INSTDIR\bin"
476 RMDir "$INSTDIR\doc"
477 RMDir "$INSTDIR"
478
479 ; Remove install dir from PATH
480 IfFileExists "$WINDIR\system32\cmd.exe" 0 +3
481 Push "$INSTDIR\bin"
482 Call un.RemoveFromPath
483
a37e7145
GG
484 ; Remove drive menu registry entries
485 !insertmacro DriveMenuRemove
486
487 ; Check for still existing entries
4d59bff9
GG
488 IfFileExists "$INSTDIR\bin\smartd.exe" 0 +3
489 MessageBox MB_OK|MB_ICONEXCLAMATION "$INSTDIR\bin\smartd.exe could not be removed.$\nsmartd is possibly still running."
490 Goto +3
491 IfFileExists "$INSTDIR" 0 +2
492 MessageBox MB_OK "Note: $INSTDIR could not be removed."
493
a37e7145
GG
494 IfFileExists "$SMPROGRAMS\smartmontools" 0 +2
495 MessageBox MB_OK "Note: $SMPROGRAMS\smartmontools could not be removed."
496
4d59bff9
GG
497SectionEnd
498
499;--------------------------------------------------------------------
a37e7145 500; Functions
4d59bff9 501
f4e463df
GI
502!macro AdjustSectionSize section
503 SectionGetSize ${section} $0
504 IntOp $0 $0 / 2
505 SectionSetSize ${section} $0
506!macroend
507
4d59bff9
GG
508Function .onInit
509
f4e463df
GI
510 ; Set default install directories
511 StrCmp $INSTDIR "" 0 endinst ; /D=PATH option specified ?
512 ReadRegStr $INSTDIR HKLM "Software\smartmontools" "Install_Dir"
513 StrCmp $INSTDIR "" 0 endinst ; Already installed ?
514 StrCpy $INSTDIR "$PROGRAMFILES\smartmontools"
515!ifdef INPDIR64
516 StrCpy $INSTDIR32 $INSTDIR
517 StrCpy $INSTDIR64 "$PROGRAMFILES64\smartmontools"
518!endif
519 endinst:
520
521!ifdef INPDIR64
522 ; Sizes of binary sections include 32-bit and 64-bit executables
523 !insertmacro AdjustSectionSize ${SMARTCTL_SECTION}
524 !insertmacro AdjustSectionSize ${SMARTD_SECTION}
525 !insertmacro AdjustSectionSize ${SMARTCTL_NC_SECTION}
526!endif
527
d008864d
GI
528 ; Use Notepad++ if installed
529 StrCpy $EDITOR "$PROGRAMFILES\Notepad++\notepad++.exe"
530 IfFileExists "$EDITOR" +2 0
531 StrCpy $EDITOR "notepad.exe"
532
4d59bff9
GG
533 ; Hide "Add install dir to PATH" on 9x/ME
534 IfFileExists "$WINDIR\system32\cmd.exe" +2 0
a37e7145 535 SectionSetText ${PATH_SECTION} ""
4d59bff9 536
a7e8ffec
GI
537 Call ParseCmdLine
538FunctionEnd
539
f4e463df
GI
540; Check x64 section and update INSTDIR accordingly
541
542!ifdef INPDIR64
543Function CheckX64
544 SectionGetFlags ${X64_SECTION} $0
545 IntOp $0 $0 & ${SF_SELECTED}
546 IntCmp $0 ${SF_SELECTED} x64
547 StrCpy $X64 ""
548 StrCmp $INSTDIR32 "" +3
549 StrCpy $INSTDIR $INSTDIR32
550 StrCpy $INSTDIR32 ""
551 Goto done
552 x64:
553 StrCpy $X64 "t"
554 StrCmp $INSTDIR64 "" +3
555 StrCpy $INSTDIR $INSTDIR64
556 StrCpy $INSTDIR64 ""
557 done:
558FunctionEnd
559!endif
560
a7e8ffec
GI
561; Command line parsing
562!macro CheckCmdLineOption name section
563 StrCpy $allopts "$allopts,${name}"
564 Push ",$opts,"
565 Push ",${name},"
566 Call StrStr
567 Pop $0
568 StrCmp $0 "" 0 sel_${name}
569 !insertmacro UnselectSection ${section}
570 Goto done_${name}
571sel_${name}:
572 !insertmacro SelectSection ${section}
573 StrCpy $nomatch ""
574done_${name}:
575!macroend
576
577Function ParseCmdLine
578 ; get /SO option
579 Var /global opts
580 ${GetParameters} $R0
581 ${GetOptions} $R0 "/SO" $opts
582 IfErrors 0 +2
583 Return
584 Var /global allopts
585 StrCpy $allopts ""
586 Var /global nomatch
587 StrCpy $nomatch "t"
588 ; turn sections on or off
f4e463df
GI
589!ifdef INPDIR64
590 !insertmacro CheckCmdLineOption "x64" ${X64_SECTION}
591 Call CheckX64
592 StrCmp $opts "x64" 0 +2
593 Return ; leave sections unchanged if only "x64" is specified
594!endif
a7e8ffec
GI
595 !insertmacro CheckCmdLineOption "smartctl" ${SMARTCTL_SECTION}
596 !insertmacro CheckCmdLineOption "smartd" ${SMARTD_SECTION}
597 !insertmacro CheckCmdLineOption "smartctlnc" ${SMARTCTL_NC_SECTION}
598 !insertmacro CheckCmdLineOption "drivedb" ${DRIVEDB_SECTION}
599 !insertmacro CheckCmdLineOption "doc" ${DOC_SECTION}
600 !insertmacro CheckCmdLineOption "uninst" ${UNINST_SECTION}
601 !insertmacro CheckCmdLineOption "menu" ${MENU_SECTION}
602 !insertmacro CheckCmdLineOption "path" ${PATH_SECTION}
603 !insertmacro CheckCmdLineOption "driveremove" ${DRIVE_REMOVE_SECTION}
604 !insertmacro CheckCmdLineOption "drive0" ${DRIVE_0_SECTION}
605 !insertmacro CheckCmdLineOption "drive1" ${DRIVE_1_SECTION}
606 !insertmacro CheckCmdLineOption "drive2" ${DRIVE_2_SECTION}
607 !insertmacro CheckCmdLineOption "drive3" ${DRIVE_3_SECTION}
608 !insertmacro CheckCmdLineOption "drive4" ${DRIVE_4_SECTION}
609 !insertmacro CheckCmdLineOption "drive5" ${DRIVE_5_SECTION}
a7e8ffec
GI
610 StrCmp $opts "-" done
611 StrCmp $nomatch "" done
612 StrCpy $0 "$allopts,-" "" 1
613 MessageBox MB_OK "Usage: smartmontools-VERSION.win32-setup [/S] [/SO component,...] [/D=INSTDIR]$\n$\ncomponents:$\n $0"
614 Abort
615done:
4d59bff9
GG
616FunctionEnd
617
d008864d 618; Install runcmda.exe if missing
cfbba5b9 619
d008864d
GI
620Function CheckRunCmdA
621 IfFileExists "$INSTDIR\bin\runcmda.exe" done 0
cfbba5b9 622 SetOutPath "$INSTDIR\bin"
f4e463df 623 !insertmacro FileExe "bin\runcmda.exe" ""
d008864d 624 File "${INPDIR}\bin\runcmda.exe.manifest"
cfbba5b9
GI
625 done:
626FunctionEnd
627
4d59bff9
GG
628
629;--------------------------------------------------------------------
a37e7145 630; Path functions
4d59bff9
GG
631;
632; Based on example from:
633; http://nsis.sourceforge.net/Path_Manipulation
634;
635
636
637!include "WinMessages.nsh"
638
639; Registry Entry for environment (NT4,2000,XP)
640; All users:
641;!define Environ 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"'
642; Current user only:
643!define Environ 'HKCU "Environment"'
644
645
646; AddToPath - Appends dir to PATH
647; (does not work on Win9x/ME)
648;
649; Usage:
650; Push "dir"
651; Call AddToPath
652
653Function AddToPath
654 Exch $0
655 Push $1
656 Push $2
657 Push $3
a37e7145 658
4d59bff9
GG
659 ReadRegStr $1 ${Environ} "PATH"
660 Push "$1;"
661 Push "$0;"
662 Call StrStr
663 Pop $2
a37e7145 664 StrCmp $2 "" 0 done
4d59bff9
GG
665 Push "$1;"
666 Push "$0\;"
667 Call StrStr
668 Pop $2
a37e7145
GG
669 StrCmp $2 "" 0 done
670
4d59bff9
GG
671 DetailPrint "Add to PATH: $0"
672 StrCpy $2 $1 1 -1
673 StrCmp $2 ";" 0 +2
674 StrCpy $1 $1 -1 ; remove trailing ';'
675 StrCmp $1 "" +2 ; no leading ';'
676 StrCpy $0 "$1;$0"
677 WriteRegExpandStr ${Environ} "PATH" $0
678 SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
a37e7145 679
4d59bff9
GG
680done:
681 Pop $3
682 Pop $2
683 Pop $1
684 Pop $0
685FunctionEnd
686
687
688; RemoveFromPath - Removes dir from PATH
689;
690; Usage:
691; Push "dir"
692; Call RemoveFromPath
a37e7145 693
4d59bff9
GG
694Function un.RemoveFromPath
695 Exch $0
696 Push $1
697 Push $2
698 Push $3
699 Push $4
700 Push $5
701 Push $6
a37e7145 702
4d59bff9
GG
703 ReadRegStr $1 ${Environ} "PATH"
704 StrCpy $5 $1 1 -1
705 StrCmp $5 ";" +2
706 StrCpy $1 "$1;" ; ensure trailing ';'
707 Push $1
708 Push "$0;"
709 Call un.StrStr
710 Pop $2 ; pos of our dir
711 StrCmp $2 "" done
712
713 DetailPrint "Remove from PATH: $0"
714 StrLen $3 "$0;"
715 StrLen $4 $2
716 StrCpy $5 $1 -$4 ; $5 is now the part before the path to remove
717 StrCpy $6 $2 "" $3 ; $6 is now the part after the path to remove
718 StrCpy $3 "$5$6"
719 StrCpy $5 $3 1 -1
720 StrCmp $5 ";" 0 +2
721 StrCpy $3 $3 -1 ; remove trailing ';'
722 WriteRegExpandStr ${Environ} "PATH" $3
723 SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
724
725done:
726 Pop $6
727 Pop $5
728 Pop $4
729 Pop $3
730 Pop $2
731 Pop $1
732 Pop $0
733FunctionEnd
734
735
736; StrStr - find substring in a string
737;
738; Usage:
739; Push "this is some string"
740; Push "some"
741; Call StrStr
742; Pop $0 ; "some string"
a37e7145 743
4d59bff9
GG
744!macro StrStr un
745Function ${un}StrStr
746 Exch $R1 ; $R1=substring, stack=[old$R1,string,...]
747 Exch ; stack=[string,old$R1,...]
748 Exch $R2 ; $R2=string, stack=[old$R2,old$R1,...]
749 Push $R3
750 Push $R4
751 Push $R5
752 StrLen $R3 $R1
753 StrCpy $R4 0
754 ; $R1=substring, $R2=string, $R3=strlen(substring)
755 ; $R4=count, $R5=tmp
756 loop:
757 StrCpy $R5 $R2 $R3 $R4
758 StrCmp $R5 $R1 done
759 StrCmp $R5 "" done
760 IntOp $R4 $R4 + 1
761 Goto loop
762done:
763 StrCpy $R1 $R2 "" $R4
764 Pop $R5
765 Pop $R4
766 Pop $R3
767 Pop $R2
768 Exch $R1 ; $R1=old$R1, stack=[result,...]
769FunctionEnd
770!macroend
771!insertmacro StrStr ""
772!insertmacro StrStr "un."
d008864d
GI
773
774
775;--------------------------------------------------------------------
776; Set Run As Administrator flag in shortcut
777;
778; Slightly modified version from:
779; http://nsis.sourceforge.net/IShellLink_Set_RunAs_flag
780;
781
782!include "LogicLib.nsh"
783
784!define IPersistFile {0000010b-0000-0000-c000-000000000046}
785!define CLSID_ShellLink {00021401-0000-0000-C000-000000000046}
786!define IID_IShellLinkA {000214EE-0000-0000-C000-000000000046}
787!define IID_IShellLinkW {000214F9-0000-0000-C000-000000000046}
788!define IShellLinkDataList {45e2b4ae-b1c3-11d0-b92f-00a0c90312e1}
789!ifdef NSIS_UNICODE
790 !define IID_IShellLink ${IID_IShellLinkW}
791!else
792 !define IID_IShellLink ${IID_IShellLinkA}
793!endif
794
795Function ShellLinkSetRunAs
f4e463df
GI
796 ; Set archive location of $PLUGINSDIR
797 Goto +2
798 SetOutPath "$INSTDIR"
799
d008864d
GI
800 System::Store S ; push $0-$9, $R0-$R9
801 pop $9
802 ; $0 = CoCreateInstance(CLSID_ShellLink, 0, CLSCTX_INPROC_SERVER, IID_IShellLink, &$1)
803 System::Call "ole32::CoCreateInstance(g'${CLSID_ShellLink}',i0,i1,g'${IID_IShellLink}',*i.r1)i.r0"
804 ${If} $0 = 0
805 System::Call "$1->0(g'${IPersistFile}',*i.r2)i.r0" ; $0 = $1->QueryInterface(IPersistFile, &$2)
806 ${If} $0 = 0
807 System::Call "$2->5(w '$9',i 0)i.r0" ; $0 = $2->Load($9, STGM_READ)
808 ${If} $0 = 0
809 System::Call "$1->0(g'${IShellLinkDataList}',*i.r3)i.r0" ; $0 = $1->QueryInterface(IShellLinkDataList, &$3)
810 ${If} $0 = 0
811 System::Call "$3->6(*i.r4)i.r0"; $0 = $3->GetFlags(&$4)
812 ${If} $0 = 0
813 System::Call "$3->7(i $4|0x2000)i.r0" ; $0 = $3->SetFlags($4|SLDF_RUNAS_USER)
814 ${If} $0 = 0
815 System::Call "$2->6(w '$9',i1)i.r0" ; $2->Save($9, TRUE)
816 ${EndIf}
817 ${EndIf}
818 System::Call "$3->2()" ; $3->Release()
819 ${EndIf}
820 System::Call "$2->2()" ; $2->Release()
821 ${EndIf}
822 ${EndIf}
823 System::Call "$1->2()" ; $1->Release()
824 ${EndIf}
825 ${If} $0 <> 0
826 DetailPrint "Set RunAsAdmin: $9 failed ($0)"
827 ${Else}
828 DetailPrint "Set RunAsAdmin: $9"
829 ${EndIf}
830 System::Store L ; push $0-$9, $R0-$R9
831FunctionEnd