2 ; smartmontools install NSIS script
4 ; Home page of code is: http://smartmontools.sourceforge.net
6 ; Copyright (C) 2006-12 Christian Franke <smartmontools-support@lists.sourceforge.net>
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)
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/>.
16 ; $Id: installer.nsi 3545 2012-05-25 21:19:03Z chrfranke $
20 ;--------------------------------------------------------------------
21 ; Command line arguments:
22 ; makensis -DINPDIR=<input-dir> -DINPDIR64=<input-dir-64-bit> \
23 ; -DOUTFILE=<output-file> -DVERSTR=<version-string> installer.nsi
30 !define OUTFILE "smartmontools.win32-setup.exe"
33 ;--------------------------------------------------------------------
39 SetCompressor /solid lzma
42 InstallColors /windows
45 ;InstallDir "$PROGRAMFILES\smartmontools"
46 ;InstallDirRegKey HKLM "Software\smartmontools" "Install_Dir"
56 LicenseData "${INPDIR}\doc\COPYING.txt"
58 !include "FileFunc.nsh"
59 !include "Sections.nsh"
61 !insertmacro GetParameters
62 !insertmacro GetOptions
64 RequestExecutionLevel admin
66 ;--------------------------------------------------------------------
72 Page directory CheckX64
78 UninstPage uninstConfirm
82 InstType "Extract files only"
86 ;--------------------------------------------------------------------
90 Section "64-bit version (EXPERIMENTAL)" X64_SECTION
91 ; Handled in Function CheckX64
95 SectionGroup "!Program files"
97 !macro FileExe path option
99 ; Use dummy SetOutPath to control archive location of executables
102 SetOutPath "$INSTDIR\bin64"
103 File ${option} '${INPDIR64}\${path}'
106 SetOutPath "$INSTDIR\bin"
107 File ${option} '${INPDIR}\${path}'
109 File ${option} '${INPDIR}\${path}'
113 Section "smartctl" SMARTCTL_SECTION
117 SetOutPath "$INSTDIR\bin"
118 !insertmacro FileExe "bin\smartctl.exe" ""
122 Section "smartd" SMARTD_SECTION
126 SetOutPath "$INSTDIR\bin"
130 IfFileExists "$INSTDIR\bin\smartd.exe" 0 nosrv
131 ReadRegStr $0 HKLM "System\CurrentControlSet\Services\smartd" "ImagePath"
133 ExecWait "net stop smartd" $1
135 !insertmacro FileExe "bin\smartd.exe" ""
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"
141 IfFileExists "$WINDIR\system32\cmd.exe" 0 nosysl
142 !insertmacro FileExe "bin\syslogevt.exe" /nonfatal
147 MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 "Restart smartd service ?" IDYES 0 IDNO +2
148 ExecWait "net start smartd"
152 Section "smartctl-nc (GSmartControl)" SMARTCTL_NC_SECTION
156 SetOutPath "$INSTDIR\bin"
157 !insertmacro FileExe "bin\smartctl-nc.exe" ""
161 Section "drivedb.h (Drive Database)" DRIVEDB_SECTION
165 SetOutPath "$INSTDIR\bin"
166 File "${INPDIR}\bin\drivedb.h"
167 File "${INPDIR}\bin\update-smart-drivedb.exe"
173 Section "!Documentation" DOC_SECTION
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"
188 File "${INPDIR64}\doc\checksums64.txt"
190 File "${INPDIR}\doc\checksums32.txt"
192 File "${INPDIR}\doc\checksums??.txt"
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"
204 Section "Uninstaller" UNINST_SECTION
209 CreateDirectory "$INSTDIR"
211 ; Save installation location
212 WriteRegStr HKLM "Software\smartmontools" "Install_Dir" "$INSTDIR"
214 ; Write uninstall keys and program
215 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "DisplayName" "smartmontools"
217 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "DisplayVersion" "${VERSTR}"
219 ;WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "Publisher" "smartmontools"
220 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "UninstallString" '"$INSTDIR\uninst-smartmontools.exe"'
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/"
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"
231 Section "Start Menu Shortcuts" MENU_SECTION
235 SetShellVarContext all
237 CreateDirectory "$SMPROGRAMS\smartmontools"
239 !macro CreateAdminShortCut link target args
240 CreateShortCut '${link}' '${target}' '${args}'
242 Call ShellLinkSetRunAs
246 IfFileExists "$INSTDIR\bin\smartctl.exe" 0 +2
247 IfFileExists "$INSTDIR\bin\smartd.exe" 0 noruncmd
248 SetOutPath "$INSTDIR\bin"
249 !insertmacro FileExe "bin\runcmdu.exe" ""
250 File "${INPDIR}\bin\runcmdu.exe.manifest"
254 IfFileExists "$INSTDIR\bin\smartctl.exe" 0 noctl
255 SetOutPath "$INSTDIR\bin"
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"'
259 CreateDirectory "$SMPROGRAMS\smartmontools\smartctl Examples"
260 FileOpen $0 "$SMPROGRAMS\smartmontools\smartctl Examples\!Read this first!.txt" "w"
261 FileWrite $0 "All the example commands in this directory$\r$\napply to the first drive (sda).$\r$\n"
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"
279 IfFileExists "$INSTDIR\bin\smartd.exe" 0 nod
280 SetOutPath "$INSTDIR\bin"
281 CreateDirectory "$SMPROGRAMS\smartmontools\smartd Examples"
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"
291 ; smartd service (not on 9x/ME)
292 IfFileExists "$WINDIR\system32\cmd.exe" 0 nosvc
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"
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"
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"
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"
325 CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\Windows version download page.lnk" "http://smartmontools-win32.dyndns.org/smartmontools/"
329 CreateShortCut "$SMPROGRAMS\smartmontools\smartmontools Home Page.lnk" "http://smartmontools.sourceforge.net/"
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" ""
338 IfFileExists "$INSTDIR\uninst-smartmontools.exe" 0 noinst
339 SetOutPath "$INSTDIR"
340 !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\Uninstall smartmontools.lnk" "$INSTDIR\uninst-smartmontools.exe" ""
345 Section "Add install dir to PATH" PATH_SECTION
349 IfFileExists "$WINDIR\system32\cmd.exe" 0 +3
355 SectionGroup "Add smartctl to drive menu"
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"
367 Section "Remove existing entries first" DRIVE_REMOVE_SECTION
369 !insertmacro DriveMenuRemove
372 !macro DriveSection id name args
373 Section 'smartctl ${args} ...' DRIVE_${id}_SECTION
376 DetailPrint 'Add drive menu entry "${name}": smartctl ${args} ...'
377 WriteRegStr HKCR "Drive\shell\smartctl${id}" "" "${name}"
378 WriteRegStr HKCR "Drive\shell\smartctl${id}\command" "" '"$INSTDIR\bin\runcmda.exe" "$INSTDIR\bin\smartctl.exe" ${args} %L'
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"'
391 ;--------------------------------------------------------------------
395 ; Stop & remove service
396 IfFileExists "$INSTDIR\bin\smartd.exe" 0 nosrv
397 ReadRegStr $0 HKLM "System\CurrentControlSet\Services\smartd" "ImagePath"
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"
404 ; Remove installer registry keys
405 DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools"
406 DeleteRegKey HKLM "Software\smartmontools"
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"
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"
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"
429 Delete "$INSTDIR\bin\smartctl.exe"
430 Delete "$INSTDIR\bin\smartctl-nc.exe"
431 Delete "$INSTDIR\bin\smartd.exe"
432 Delete "$INSTDIR\bin\syslogevt.exe"
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"
438 Delete "$INSTDIR\bin\smartctl-run.bat"
439 Delete "$INSTDIR\bin\smartd-run.bat"
440 Delete "$INSTDIR\bin\net-run.bat"
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"
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"
453 Delete "$INSTDIR\doc\checksums*.txt"
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"
464 SetShellVarContext all
465 Delete "$SMPROGRAMS\smartmontools\*.*"
466 Delete "$SMPROGRAMS\smartmontools\Documentation\*.*"
467 Delete "$SMPROGRAMS\smartmontools\smartctl Examples\*.*"
468 Delete "$SMPROGRAMS\smartmontools\smartd Examples\*.*"
471 RMDir "$SMPROGRAMS\smartmontools\Documentation"
472 RMDir "$SMPROGRAMS\smartmontools\smartctl Examples"
473 RMDir "$SMPROGRAMS\smartmontools\smartd Examples"
474 RMDir "$SMPROGRAMS\smartmontools"
479 ; Remove install dir from PATH
480 IfFileExists "$WINDIR\system32\cmd.exe" 0 +3
482 Call un.RemoveFromPath
484 ; Remove drive menu registry entries
485 !insertmacro DriveMenuRemove
487 ; Check for still existing entries
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."
491 IfFileExists "$INSTDIR" 0 +2
492 MessageBox MB_OK "Note: $INSTDIR could not be removed."
494 IfFileExists "$SMPROGRAMS\smartmontools" 0 +2
495 MessageBox MB_OK "Note: $SMPROGRAMS\smartmontools could not be removed."
499 ;--------------------------------------------------------------------
502 !macro AdjustSectionSize section
503 SectionGetSize ${section} $0
505 SectionSetSize ${section} $0
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"
516 StrCpy $INSTDIR32 $INSTDIR
517 StrCpy $INSTDIR64 "$PROGRAMFILES64\smartmontools"
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}
528 ; Use Notepad++ if installed
529 StrCpy $EDITOR "$PROGRAMFILES\Notepad++\notepad++.exe"
530 IfFileExists "$EDITOR" +2 0
531 StrCpy $EDITOR "notepad.exe"
533 ; Hide "Add install dir to PATH" on 9x/ME
534 IfFileExists "$WINDIR\system32\cmd.exe" +2 0
535 SectionSetText ${PATH_SECTION} ""
540 ; Check x64 section and update INSTDIR accordingly
544 SectionGetFlags ${X64_SECTION} $0
545 IntOp $0 $0 & ${SF_SELECTED}
546 IntCmp $0 ${SF_SELECTED} x64
548 StrCmp $INSTDIR32 "" +3
549 StrCpy $INSTDIR $INSTDIR32
554 StrCmp $INSTDIR64 "" +3
555 StrCpy $INSTDIR $INSTDIR64
561 ; Command line parsing
562 !macro CheckCmdLineOption name section
563 StrCpy $allopts "$allopts,${name}"
568 StrCmp $0 "" 0 sel_${name}
569 !insertmacro UnselectSection ${section}
572 !insertmacro SelectSection ${section}
577 Function ParseCmdLine
581 ${GetOptions} $R0 "/SO" $opts
588 ; turn sections on or off
590 !insertmacro CheckCmdLineOption "x64" ${X64_SECTION}
592 StrCmp $opts "x64" 0 +2
593 Return ; leave sections unchanged if only "x64" is specified
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}
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"
618 ; Install runcmda.exe if missing
620 Function CheckRunCmdA
621 IfFileExists "$INSTDIR\bin\runcmda.exe" done 0
622 SetOutPath "$INSTDIR\bin"
623 !insertmacro FileExe "bin\runcmda.exe" ""
624 File "${INPDIR}\bin\runcmda.exe.manifest"
629 ;--------------------------------------------------------------------
632 ; Based on example from:
633 ; http://nsis.sourceforge.net/Path_Manipulation
637 !include "WinMessages.nsh"
639 ; Registry Entry for environment (NT4,2000,XP)
641 ;!define Environ 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"'
643 !define Environ 'HKCU "Environment"'
646 ; AddToPath - Appends dir to PATH
647 ; (does not work on Win9x/ME)
659 ReadRegStr $1 ${Environ} "PATH"
671 DetailPrint "Add to PATH: $0"
674 StrCpy $1 $1 -1 ; remove trailing ';'
675 StrCmp $1 "" +2 ; no leading ';'
677 WriteRegExpandStr ${Environ} "PATH" $0
678 SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
688 ; RemoveFromPath - Removes dir from PATH
692 ; Call RemoveFromPath
694 Function un.RemoveFromPath
703 ReadRegStr $1 ${Environ} "PATH"
706 StrCpy $1 "$1;" ; ensure trailing ';'
710 Pop $2 ; pos of our dir
713 DetailPrint "Remove from PATH: $0"
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
721 StrCpy $3 $3 -1 ; remove trailing ';'
722 WriteRegExpandStr ${Environ} "PATH" $3
723 SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
736 ; StrStr - find substring in a string
739 ; Push "this is some string"
742 ; Pop $0 ; "some string"
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,...]
754 ; $R1=substring, $R2=string, $R3=strlen(substring)
757 StrCpy $R5 $R2 $R3 $R4
763 StrCpy $R1 $R2 "" $R4
768 Exch $R1 ; $R1=old$R1, stack=[result,...]
771 !insertmacro StrStr ""
772 !insertmacro StrStr "un."
775 ;--------------------------------------------------------------------
776 ; Set Run As Administrator flag in shortcut
778 ; Slightly modified version from:
779 ; http://nsis.sourceforge.net/IShellLink_Set_RunAs_flag
782 !include "LogicLib.nsh"
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}
790 !define IID_IShellLink ${IID_IShellLinkW}
792 !define IID_IShellLink ${IID_IShellLinkA}
795 Function ShellLinkSetRunAs
796 ; Set archive location of $PLUGINSDIR
798 SetOutPath "$INSTDIR"
800 System::Store S ; push $0-$9, $R0-$R9
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"
805 System::Call "$1->0(g'${IPersistFile}',*i.r2)i.r0" ; $0 = $1->QueryInterface(IPersistFile, &$2)
807 System::Call "$2->5(w '$9',i 0)i.r0" ; $0 = $2->Load($9, STGM_READ)
809 System::Call "$1->0(g'${IShellLinkDataList}',*i.r3)i.r0" ; $0 = $1->QueryInterface(IShellLinkDataList, &$3)
811 System::Call "$3->6(*i.r4)i.r0"; $0 = $3->GetFlags(&$4)
813 System::Call "$3->7(i $4|0x2000)i.r0" ; $0 = $3->SetFlags($4|SLDF_RUNAS_USER)
815 System::Call "$2->6(w '$9',i1)i.r0" ; $2->Save($9, TRUE)
818 System::Call "$3->2()" ; $3->Release()
820 System::Call "$2->2()" ; $2->Release()
823 System::Call "$1->2()" ; $1->Release()
826 DetailPrint "Set RunAsAdmin: $9 failed ($0)"
828 DetailPrint "Set RunAsAdmin: $9"
830 System::Store L ; push $0-$9, $R0-$R9