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) |