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