|
version 1.1, 2012/02/21 16:32:16
|
version 1.1.1.2, 2012/10/09 09:36:45
|
|
Line 3
|
Line 3
|
| ; |
; |
| ; Home page of code is: http://smartmontools.sourceforge.net |
; Home page of code is: http://smartmontools.sourceforge.net |
| ; |
; |
| ; Copyright (C) 2006-11 Christian Franke <smartmontools-support@lists.sourceforge.net> | ; Copyright (C) 2006-12 Christian Franke <smartmontools-support@lists.sourceforge.net> |
| ; |
; |
| ; This program is free software; you can redistribute it and/or modify |
; This program is free software; you can redistribute it and/or modify |
| ; it under the terms of the GNU General Public License as published by |
; it under the terms of the GNU General Public License as published by |
|
Line 19
|
Line 19
|
| |
|
| ;-------------------------------------------------------------------- |
;-------------------------------------------------------------------- |
| ; Command line arguments: |
; Command line arguments: |
| ; makensis -DINPDIR=<input-dir> -DOUTFILE=<output-file> -DVERSTR=<version-string> installer.nsi | ; makensis -DINPDIR=<input-dir> -DINPDIR64=<input-dir-64-bit> \ |
| | ; -DOUTFILE=<output-file> -DVERSTR=<version-string> installer.nsi |
| |
|
| !ifndef INPDIR |
!ifndef INPDIR |
| !define INPDIR "." |
!define INPDIR "." |
|
Line 40 SetCompressor /solid lzma
|
Line 41 SetCompressor /solid lzma
|
| XPStyle on |
XPStyle on |
| InstallColors /windows |
InstallColors /windows |
| |
|
| InstallDir "$PROGRAMFILES\smartmontools" | ; Set in .onInit |
| InstallDirRegKey HKLM "Software\smartmontools" "Install_Dir" | ;InstallDir "$PROGRAMFILES\smartmontools" |
| | ;InstallDirRegKey HKLM "Software\smartmontools" "Install_Dir" |
| |
|
| Var EDITOR |
Var EDITOR |
| Var UBCDDIR |
|
| |
|
| |
!ifdef INPDIR64 |
| |
Var X64 |
| |
Var INSTDIR32 |
| |
Var INSTDIR64 |
| |
!endif |
| |
|
| LicenseData "${INPDIR}\doc\COPYING.txt" |
LicenseData "${INPDIR}\doc\COPYING.txt" |
| |
|
| !include "FileFunc.nsh" |
!include "FileFunc.nsh" |
|
Line 61 RequestExecutionLevel admin
|
Line 68 RequestExecutionLevel admin
|
| |
|
| Page license |
Page license |
| Page components |
Page components |
| Page directory SkipProgPath "" "" | !ifdef INPDIR64 |
| PageEx directory | Page directory CheckX64 |
| PageCallbacks SkipUBCDPath "" "" | !else |
| DirText "Setup will install the UBCD4Win plugin in the following folder." | Page directory |
| DirVar $UBCDDIR | !endif |
| PageExEnd | |
| Page instfiles |
Page instfiles |
| |
|
| UninstPage uninstConfirm |
UninstPage uninstConfirm |
|
Line 75 UninstPage instfiles
|
Line 81 UninstPage instfiles
|
| InstType "Full" |
InstType "Full" |
| InstType "Extract files only" |
InstType "Extract files only" |
| InstType "Drive menu" |
InstType "Drive menu" |
| InstType "UBCD4Win plugin" |
|
| |
|
| |
|
| ;-------------------------------------------------------------------- |
;-------------------------------------------------------------------- |
| ; Sections |
; Sections |
| |
|
| |
!ifdef INPDIR64 |
| |
Section "64-bit version (EXPERIMENTAL)" X64_SECTION |
| |
; Handled in Function CheckX64 |
| |
SectionEnd |
| |
!endif |
| |
|
| SectionGroup "!Program files" |
SectionGroup "!Program files" |
| |
|
| |
!macro FileExe path option |
| |
!ifdef INPDIR64 |
| |
; Use dummy SetOutPath to control archive location of executables |
| |
StrCmp $X64 "" +5 |
| |
Goto +2 |
| |
SetOutPath "$INSTDIR\bin64" |
| |
File ${option} '${INPDIR64}\${path}' |
| |
GoTo +4 |
| |
Goto +2 |
| |
SetOutPath "$INSTDIR\bin" |
| |
File ${option} '${INPDIR}\${path}' |
| |
!else |
| |
File ${option} '${INPDIR}\${path}' |
| |
!endif |
| |
!macroend |
| |
|
| Section "smartctl" SMARTCTL_SECTION |
Section "smartctl" SMARTCTL_SECTION |
| |
|
| SectionIn 1 2 |
SectionIn 1 2 |
| |
|
| SetOutPath "$INSTDIR\bin" |
SetOutPath "$INSTDIR\bin" |
| File "${INPDIR}\bin\smartctl.exe" | !insertmacro FileExe "bin\smartctl.exe" "" |
| |
|
| SectionEnd |
SectionEnd |
| |
|
|
Line 105 SectionGroup "!Program files"
|
Line 132 SectionGroup "!Program files"
|
| StrCmp $0 "" nosrv |
StrCmp $0 "" nosrv |
| ExecWait "net stop smartd" $1 |
ExecWait "net stop smartd" $1 |
| nosrv: |
nosrv: |
| File "${INPDIR}\bin\smartd.exe" | !insertmacro FileExe "bin\smartd.exe" "" |
| |
|
| IfFileExists "$INSTDIR\bin\smartd.conf" 0 +2 |
IfFileExists "$INSTDIR\bin\smartd.conf" 0 +2 |
| MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 "Replace existing configuration file$\n$INSTDIR\bin\smartd.conf ?" IDYES 0 IDNO +2 |
MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 "Replace existing configuration file$\n$INSTDIR\bin\smartd.conf ?" IDYES 0 IDNO +2 |
| File "${INPDIR}\doc\smartd.conf" |
File "${INPDIR}\doc\smartd.conf" |
| |
|
| IfFileExists "$WINDIR\system32\cmd.exe" 0 +2 | IfFileExists "$WINDIR\system32\cmd.exe" 0 nosysl |
| File /nonfatal "${INPDIR}\bin\syslogevt.exe" | !insertmacro FileExe "bin\syslogevt.exe" /nonfatal |
| | nosysl: |
| |
|
| ; Restart service ? |
; Restart service ? |
| StrCmp $1 "0" 0 +3 |
StrCmp $1 "0" 0 +3 |
|
Line 126 SectionGroup "!Program files"
|
Line 154 SectionGroup "!Program files"
|
| SectionIn 1 2 |
SectionIn 1 2 |
| |
|
| SetOutPath "$INSTDIR\bin" |
SetOutPath "$INSTDIR\bin" |
| File "${INPDIR}\bin\smartctl-nc.exe" | !insertmacro FileExe "bin\smartctl-nc.exe" "" |
| |
|
| SectionEnd |
SectionEnd |
| |
|
|
Line 155 Section "!Documentation" DOC_SECTION
|
Line 183 Section "!Documentation" DOC_SECTION
|
| File "${INPDIR}\doc\README.txt" |
File "${INPDIR}\doc\README.txt" |
| File "${INPDIR}\doc\TODO.txt" |
File "${INPDIR}\doc\TODO.txt" |
| File "${INPDIR}\doc\WARNINGS.txt" |
File "${INPDIR}\doc\WARNINGS.txt" |
| File "${INPDIR}\doc\checksums.txt" | !ifdef INPDIR64 |
| | StrCmp $X64 "" +3 |
| | File "${INPDIR64}\doc\checksums64.txt" |
| | GoTo +2 |
| | File "${INPDIR}\doc\checksums32.txt" |
| | !else |
| | File "${INPDIR}\doc\checksums??.txt" |
| | !endif |
| File "${INPDIR}\doc\smartctl.8.html" |
File "${INPDIR}\doc\smartctl.8.html" |
| File "${INPDIR}\doc\smartctl.8.txt" |
File "${INPDIR}\doc\smartctl.8.txt" |
| File "${INPDIR}\doc\smartd.8.html" |
File "${INPDIR}\doc\smartd.8.html" |
|
Line 169 SectionEnd
|
Line 204 SectionEnd
|
| Section "Uninstaller" UNINST_SECTION |
Section "Uninstaller" UNINST_SECTION |
| |
|
| SectionIn 1 |
SectionIn 1 |
| AddSize 35 | AddSize 40 |
| |
|
| CreateDirectory "$INSTDIR" |
CreateDirectory "$INSTDIR" |
| |
|
|
Line 209 Section "Start Menu Shortcuts" MENU_SECTION
|
Line 244 Section "Start Menu Shortcuts" MENU_SECTION
|
| |
|
| ; runcmdu |
; runcmdu |
| IfFileExists "$INSTDIR\bin\smartctl.exe" 0 +2 |
IfFileExists "$INSTDIR\bin\smartctl.exe" 0 +2 |
| IfFileExists "$INSTDIR\bin\smartd.exe" 0 +4 | IfFileExists "$INSTDIR\bin\smartd.exe" 0 noruncmd |
| SetOutPath "$INSTDIR\bin" |
SetOutPath "$INSTDIR\bin" |
| File "${INPDIR}\bin\runcmdu.exe" | !insertmacro FileExe "bin\runcmdu.exe" "" |
| File "${INPDIR}\bin\runcmdu.exe.manifest" |
File "${INPDIR}\bin\runcmdu.exe.manifest" |
| |
noruncmd: |
| |
|
| ; smartctl |
; smartctl |
| IfFileExists "$INSTDIR\bin\smartctl.exe" 0 noctl |
IfFileExists "$INSTDIR\bin\smartctl.exe" 0 noctl |
|
Line 352 SectionGroup "Add smartctl to drive menu"
|
Line 388 SectionGroup "Add smartctl to drive menu"
|
| |
|
| SectionGroupEnd |
SectionGroupEnd |
| |
|
| Section "UBCD4Win Plugin" UBCD_SECTION |
|
| |
|
| SectionIn 4 |
|
| |
|
| SetOutPath "$UBCDDIR" |
|
| DetailPrint "Create file: smartmontools.inf" |
|
| FileOpen $0 "$UBCDDIR\smartmontools.inf" "w" |
|
| FileWrite $0 '; smartmontools.inf$\r$\n; PE Builder v3 plug-in INF file$\r$\n' |
|
| FileWrite $0 '; Created by smartmontools installer$\r$\n' |
|
| FileWrite $0 '; http://smartmontools.sourceforge.net/$\r$\n$\r$\n' |
|
| FileWrite $0 '[Version]$\r$\nSignature= "$$Windows NT$$"$\r$\n$\r$\n' |
|
| FileWrite $0 '[PEBuilder]$\r$\nName="Disk -Diagnostic: smartmontools"$\r$\n' |
|
| FileWrite $0 'Enable=1$\r$\nHelp="files\smartctl.8.html"$\r$\n$\r$\n' |
|
| FileWrite $0 '[WinntDirectories]$\r$\na=Programs\smartmontools,2$\r$\n$\r$\n' |
|
| FileWrite $0 '[SourceDisksFolders]$\r$\nfiles=a,,1$\r$\n$\r$\n' |
|
| FileWrite $0 '[Append]$\r$\nnu2menu.xml, smartmontools_nu2menu.xml$\r$\n' |
|
| FileClose $0 |
|
| |
|
| DetailPrint "Create file: smartmontools_nu2menu.xml" |
|
| FileOpen $0 "$UBCDDIR\smartmontools_nu2menu.xml" "w" |
|
| FileWrite $0 '<!-- Nu2Menu entry for smartmontools -->$\r$\n<NU2MENU>$\r$\n' |
|
| FileWrite $0 '$\t<MENU ID="Programs">$\r$\n$\t$\t<MITEM TYPE="POPUP" MENUID="Disk Tools">' |
|
| FileWrite $0 'Disk Tools</MITEM>$\r$\n$\t</MENU>$\r$\n$\t<MENU ID="Disk Tools">$\r$\n' |
|
| FileWrite $0 '$\t$\t<MITEM TYPE="POPUP" MENUID="Diagnostic">Diagnostic</MITEM>$\r$\n$\t</MENU>' |
|
| FileWrite $0 '$\r$\n$\t<MENU ID="Diagnostic">$\r$\n$\t$\t<MITEM TYPE="ITEM" DISABLED="' |
|
| FileWrite $0 '@Not(@FileExists(@GetProgramDrive()\Programs\smartmontools\smartctl.exe))" ' |
|
| FileWrite $0 'CMD="RUN" FUNC="cmd.exe /k cd /d @GetProgramDrive()\Programs\smartmontools&' |
|
| FileWrite $0 'set PATH=@GetProgramDrive()\Programs\smartmontools;%PATH% ">' |
|
| FileWrite $0 'smartctl</MITEM>$\r$\n$\t</MENU>$\r$\n</NU2MENU>$\r$\n' |
|
| FileClose $0 |
|
| |
|
| SetOutPath "$UBCDDIR\files" |
|
| File "${INPDIR}\bin\smartctl.exe" |
|
| File "${INPDIR}\bin\smartd.exe" |
|
| File "${INPDIR}\doc\smartctl.8.html" |
|
| File "${INPDIR}\doc\smartctl.8.txt" |
|
| File "${INPDIR}\doc\smartd.8.html" |
|
| File "${INPDIR}\doc\smartd.8.txt" |
|
| File "${INPDIR}\doc\smartd.conf" |
|
| |
|
| SectionEnd |
|
| |
|
| |
|
| ;-------------------------------------------------------------------- |
;-------------------------------------------------------------------- |
| |
|
| Section "Uninstall" |
Section "Uninstall" |
|
Line 457 Section "Uninstall"
|
Line 450 Section "Uninstall"
|
| Delete "$INSTDIR\doc\README.txt" |
Delete "$INSTDIR\doc\README.txt" |
| Delete "$INSTDIR\doc\TODO.txt" |
Delete "$INSTDIR\doc\TODO.txt" |
| Delete "$INSTDIR\doc\WARNINGS.txt" |
Delete "$INSTDIR\doc\WARNINGS.txt" |
| Delete "$INSTDIR\doc\checksums.txt" | Delete "$INSTDIR\doc\checksums*.txt" |
| Delete "$INSTDIR\doc\smartctl.8.html" |
Delete "$INSTDIR\doc\smartctl.8.html" |
| Delete "$INSTDIR\doc\smartctl.8.txt" |
Delete "$INSTDIR\doc\smartctl.8.txt" |
| Delete "$INSTDIR\doc\smartd.8.html" |
Delete "$INSTDIR\doc\smartd.8.html" |
|
Line 506 SectionEnd
|
Line 499 SectionEnd
|
| ;-------------------------------------------------------------------- |
;-------------------------------------------------------------------- |
| ; Functions |
; Functions |
| |
|
| |
!macro AdjustSectionSize section |
| |
SectionGetSize ${section} $0 |
| |
IntOp $0 $0 / 2 |
| |
SectionSetSize ${section} $0 |
| |
!macroend |
| |
|
| Function .onInit |
Function .onInit |
| |
|
| |
; Set default install directories |
| |
StrCmp $INSTDIR "" 0 endinst ; /D=PATH option specified ? |
| |
ReadRegStr $INSTDIR HKLM "Software\smartmontools" "Install_Dir" |
| |
StrCmp $INSTDIR "" 0 endinst ; Already installed ? |
| |
StrCpy $INSTDIR "$PROGRAMFILES\smartmontools" |
| |
!ifdef INPDIR64 |
| |
StrCpy $INSTDIR32 $INSTDIR |
| |
StrCpy $INSTDIR64 "$PROGRAMFILES64\smartmontools" |
| |
!endif |
| |
endinst: |
| |
|
| |
!ifdef INPDIR64 |
| |
; Sizes of binary sections include 32-bit and 64-bit executables |
| |
!insertmacro AdjustSectionSize ${SMARTCTL_SECTION} |
| |
!insertmacro AdjustSectionSize ${SMARTD_SECTION} |
| |
!insertmacro AdjustSectionSize ${SMARTCTL_NC_SECTION} |
| |
!endif |
| |
|
| ; Use Notepad++ if installed |
; Use Notepad++ if installed |
| StrCpy $EDITOR "$PROGRAMFILES\Notepad++\notepad++.exe" |
StrCpy $EDITOR "$PROGRAMFILES\Notepad++\notepad++.exe" |
| IfFileExists "$EDITOR" +2 0 |
IfFileExists "$EDITOR" +2 0 |
| StrCpy $EDITOR "notepad.exe" |
StrCpy $EDITOR "notepad.exe" |
| |
|
| ; Get UBCD4Win install location |
|
| ReadRegStr $0 HKLM "Software\UBCD4Win" "InstallPath" |
|
| StrCmp $0 "" 0 +2 |
|
| StrCpy $0 "C:\UBCD4Win" |
|
| StrCpy $UBCDDIR "$0\plugin\Disk\Diagnostic\smartmontools" |
|
| |
|
| ; Hide "Add install dir to PATH" on 9x/ME |
; Hide "Add install dir to PATH" on 9x/ME |
| IfFileExists "$WINDIR\system32\cmd.exe" +2 0 |
IfFileExists "$WINDIR\system32\cmd.exe" +2 0 |
| SectionSetText ${PATH_SECTION} "" |
SectionSetText ${PATH_SECTION} "" |
|
Line 526 Function .onInit
|
Line 537 Function .onInit
|
| Call ParseCmdLine |
Call ParseCmdLine |
| FunctionEnd |
FunctionEnd |
| |
|
| |
; Check x64 section and update INSTDIR accordingly |
| |
|
| |
!ifdef INPDIR64 |
| |
Function CheckX64 |
| |
SectionGetFlags ${X64_SECTION} $0 |
| |
IntOp $0 $0 & ${SF_SELECTED} |
| |
IntCmp $0 ${SF_SELECTED} x64 |
| |
StrCpy $X64 "" |
| |
StrCmp $INSTDIR32 "" +3 |
| |
StrCpy $INSTDIR $INSTDIR32 |
| |
StrCpy $INSTDIR32 "" |
| |
Goto done |
| |
x64: |
| |
StrCpy $X64 "t" |
| |
StrCmp $INSTDIR64 "" +3 |
| |
StrCpy $INSTDIR $INSTDIR64 |
| |
StrCpy $INSTDIR64 "" |
| |
done: |
| |
FunctionEnd |
| |
!endif |
| |
|
| ; Command line parsing |
; Command line parsing |
| !macro CheckCmdLineOption name section |
!macro CheckCmdLineOption name section |
| StrCpy $allopts "$allopts,${name}" |
StrCpy $allopts "$allopts,${name}" |
|
Line 554 Function ParseCmdLine
|
Line 586 Function ParseCmdLine
|
| Var /global nomatch |
Var /global nomatch |
| StrCpy $nomatch "t" |
StrCpy $nomatch "t" |
| ; turn sections on or off |
; turn sections on or off |
| |
!ifdef INPDIR64 |
| |
!insertmacro CheckCmdLineOption "x64" ${X64_SECTION} |
| |
Call CheckX64 |
| |
StrCmp $opts "x64" 0 +2 |
| |
Return ; leave sections unchanged if only "x64" is specified |
| |
!endif |
| !insertmacro CheckCmdLineOption "smartctl" ${SMARTCTL_SECTION} |
!insertmacro CheckCmdLineOption "smartctl" ${SMARTCTL_SECTION} |
| !insertmacro CheckCmdLineOption "smartd" ${SMARTD_SECTION} |
!insertmacro CheckCmdLineOption "smartd" ${SMARTD_SECTION} |
| !insertmacro CheckCmdLineOption "smartctlnc" ${SMARTCTL_NC_SECTION} |
!insertmacro CheckCmdLineOption "smartctlnc" ${SMARTCTL_NC_SECTION} |
|
Line 569 Function ParseCmdLine
|
Line 607 Function ParseCmdLine
|
| !insertmacro CheckCmdLineOption "drive3" ${DRIVE_3_SECTION} |
!insertmacro CheckCmdLineOption "drive3" ${DRIVE_3_SECTION} |
| !insertmacro CheckCmdLineOption "drive4" ${DRIVE_4_SECTION} |
!insertmacro CheckCmdLineOption "drive4" ${DRIVE_4_SECTION} |
| !insertmacro CheckCmdLineOption "drive5" ${DRIVE_5_SECTION} |
!insertmacro CheckCmdLineOption "drive5" ${DRIVE_5_SECTION} |
| !insertmacro CheckCmdLineOption "ubcd" ${UBCD_SECTION} |
|
| StrCmp $opts "-" done |
StrCmp $opts "-" done |
| StrCmp $nomatch "" done |
StrCmp $nomatch "" done |
| StrCpy $0 "$allopts,-" "" 1 |
StrCpy $0 "$allopts,-" "" 1 |
|
Line 578 Function ParseCmdLine
|
Line 615 Function ParseCmdLine
|
| done: |
done: |
| FunctionEnd |
FunctionEnd |
| |
|
| ; Directory page callbacks |
|
| |
|
| !macro CheckSection section |
|
| SectionGetFlags ${section} $0 |
|
| IntOp $0 $0 & 1 |
|
| IntCmp $0 1 done |
|
| !macroend |
|
| |
|
| Function SkipProgPath |
|
| !insertmacro CheckSection ${SMARTCTL_SECTION} |
|
| !insertmacro CheckSection ${SMARTCTL_NC_SECTION} |
|
| !insertmacro CheckSection ${SMARTD_SECTION} |
|
| !insertmacro CheckSection ${DRIVEDB_SECTION} |
|
| !insertmacro CheckSection ${DOC_SECTION} |
|
| !insertmacro CheckSection ${MENU_SECTION} |
|
| !insertmacro CheckSection ${PATH_SECTION} |
|
| !insertmacro CheckSection ${DRIVE_0_SECTION} |
|
| !insertmacro CheckSection ${DRIVE_1_SECTION} |
|
| !insertmacro CheckSection ${DRIVE_2_SECTION} |
|
| !insertmacro CheckSection ${DRIVE_3_SECTION} |
|
| !insertmacro CheckSection ${DRIVE_4_SECTION} |
|
| !insertmacro CheckSection ${DRIVE_5_SECTION} |
|
| Abort |
|
| done: |
|
| FunctionEnd |
|
| |
|
| Function SkipUBCDPath |
|
| !insertmacro CheckSection ${UBCD_SECTION} |
|
| Abort |
|
| done: |
|
| FunctionEnd |
|
| |
|
| |
|
| ; Install runcmda.exe if missing |
; Install runcmda.exe if missing |
| |
|
| Function CheckRunCmdA |
Function CheckRunCmdA |
| IfFileExists "$INSTDIR\bin\runcmda.exe" done 0 |
IfFileExists "$INSTDIR\bin\runcmda.exe" done 0 |
| SetOutPath "$INSTDIR\bin" |
SetOutPath "$INSTDIR\bin" |
| File "${INPDIR}\bin\runcmda.exe" | !insertmacro FileExe "bin\runcmda.exe" "" |
| File "${INPDIR}\bin\runcmda.exe.manifest" |
File "${INPDIR}\bin\runcmda.exe.manifest" |
| done: |
done: |
| FunctionEnd |
FunctionEnd |
|
Line 789 FunctionEnd
|
Line 793 FunctionEnd
|
| !endif |
!endif |
| |
|
| Function ShellLinkSetRunAs |
Function ShellLinkSetRunAs |
| |
; Set archive location of $PLUGINSDIR |
| |
Goto +2 |
| |
SetOutPath "$INSTDIR" |
| |
|
| System::Store S ; push $0-$9, $R0-$R9 |
System::Store S ; push $0-$9, $R0-$R9 |
| pop $9 |
pop $9 |
| ; $0 = CoCreateInstance(CLSID_ShellLink, 0, CLSCTX_INPROC_SERVER, IID_IShellLink, &$1) |
; $0 = CoCreateInstance(CLSID_ShellLink, 0, CLSCTX_INPROC_SERVER, IID_IShellLink, &$1) |