;
-; smartmontools install NSIS script
+; os_win32/installer.nsi - smartmontools install NSIS script
;
-; Home page of code is: http://smartmontools.sourceforge.net
+; Home page of code is: http://www.smartmontools.org
;
-; Copyright (C) 2006-11 Christian Franke <smartmontools-support@lists.sourceforge.net>
+; Copyright (C) 2006-15 Christian Franke
;
; 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
; You should have received a copy of the GNU General Public License
; (for example COPYING); If not, see <http://www.gnu.org/licenses/>.
;
-; $Id: installer.nsi 3457 2011-10-20 16:36:47Z chrfranke $
+; $Id: installer.nsi 4174 2015-11-22 16:19:29Z chrfranke $
;
;--------------------------------------------------------------------
; 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
!define INPDIR "."
Name "smartmontools"
OutFile "${OUTFILE}"
+RequestExecutionLevel admin
+
SetCompressor /solid lzma
XPStyle on
InstallColors /windows
-InstallDir "$PROGRAMFILES\smartmontools"
-InstallDirRegKey HKLM "Software\smartmontools" "Install_Dir"
+; Set in .onInit
+;InstallDir "$PROGRAMFILES\smartmontools"
+;InstallDirRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "InstallLocation"
Var EDITOR
-Var UBCDDIR
+
+!ifdef INPDIR64
+ Var X64
+ Var INSTDIR32
+ Var INSTDIR64
+!endif
LicenseData "${INPDIR}\doc\COPYING.txt"
!include "FileFunc.nsh"
+!include "LogicLib.nsh"
!include "Sections.nsh"
-!insertmacro GetParameters
-!insertmacro GetOptions
-
-RequestExecutionLevel admin
;--------------------------------------------------------------------
; Pages
Page license
Page components
-Page directory SkipProgPath "" ""
-PageEx directory
- PageCallbacks SkipUBCDPath "" ""
- DirText "Setup will install the UBCD4Win plugin in the following folder."
- DirVar $UBCDDIR
-PageExEnd
+!ifdef INPDIR64
+ Page directory CheckX64
+!else
+ Page directory
+!endif
Page instfiles
UninstPage uninstConfirm
InstType "Full"
InstType "Extract files only"
InstType "Drive menu"
-InstType "UBCD4Win plugin"
+!ifdef INPDIR64
+InstType "Full (x64)"
+InstType "Extract files only (x64)"
+InstType "Drive menu (x64)"
+!endif
;--------------------------------------------------------------------
; Sections
+!ifdef INPDIR64
+ Section "64-bit version" X64_SECTION
+ SectionIn 4 5 6
+ ; Handled in Function CheckX64
+ SectionEnd
+
+ !define FULL_TYPES "1 4"
+ !define EXTRACT_TYPES "2 5"
+ !define DRIVEMENU_TYPE "3 6"
+!else
+ !define FULL_TYPES "1"
+ !define EXTRACT_TYPES "2"
+ !define DRIVEMENU_TYPE "3"
+!endif
+
SectionGroup "!Program files"
+ !macro FileExe path option
+ !ifdef INPDIR64
+ ; Use dummy SetOutPath to control archive location of executables
+ ${If} $X64 != ""
+ Goto +2
+ SetOutPath "$INSTDIR\bin64"
+ File ${option} '${INPDIR64}\${path}'
+ ${Else}
+ Goto +2
+ SetOutPath "$INSTDIR\bin"
+ File ${option} '${INPDIR}\${path}'
+ ${EndIf}
+ !else
+ File ${option} '${INPDIR}\${path}'
+ !endif
+ !macroend
+
Section "smartctl" SMARTCTL_SECTION
- SectionIn 1 2
+ SectionIn ${FULL_TYPES} ${EXTRACT_TYPES}
SetOutPath "$INSTDIR\bin"
- File "${INPDIR}\bin\smartctl.exe"
+ !insertmacro FileExe "bin\smartctl.exe" ""
SectionEnd
Section "smartd" SMARTD_SECTION
- SectionIn 1 2
+ SectionIn ${FULL_TYPES} ${EXTRACT_TYPES}
SetOutPath "$INSTDIR\bin"
; Stop service ?
StrCpy $1 ""
- IfFileExists "$INSTDIR\bin\smartd.exe" 0 nosrv
+ ${If} ${FileExists} "$INSTDIR\bin\smartd.exe"
ReadRegStr $0 HKLM "System\CurrentControlSet\Services\smartd" "ImagePath"
- StrCmp $0 "" nosrv
+ ${If} $0 != ""
ExecWait "net stop smartd" $1
- nosrv:
- File "${INPDIR}\bin\smartd.exe"
+ ${EndIf}
+ ${EndIf}
+ !insertmacro FileExe "bin\smartd.exe" ""
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 ?" /SD IDNO IDYES 0 IDNO +2
File "${INPDIR}\doc\smartd.conf"
- IfFileExists "$WINDIR\system32\cmd.exe" 0 +2
- File /nonfatal "${INPDIR}\bin\syslogevt.exe"
+ File "${INPDIR}\bin\smartd_warning.cmd"
+ !insertmacro FileExe "bin\wtssendmsg.exe" ""
; Restart service ?
- StrCmp $1 "0" 0 +3
- MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 "Restart smartd service ?" IDYES 0 IDNO +2
+ ${If} $1 == "0"
+ MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 "Restart smartd service ?" /SD IDNO IDYES 0 IDNO +2
ExecWait "net start smartd"
+ ${EndIf}
SectionEnd
Section "smartctl-nc (GSmartControl)" SMARTCTL_NC_SECTION
- SectionIn 1 2
+ SectionIn ${FULL_TYPES} ${EXTRACT_TYPES}
SetOutPath "$INSTDIR\bin"
- File "${INPDIR}\bin\smartctl-nc.exe"
+ !insertmacro FileExe "bin\smartctl-nc.exe" ""
SectionEnd
Section "drivedb.h (Drive Database)" DRIVEDB_SECTION
- SectionIn 1 2
+ SectionIn ${FULL_TYPES} ${EXTRACT_TYPES}
SetOutPath "$INSTDIR\bin"
File "${INPDIR}\bin\drivedb.h"
Section "!Documentation" DOC_SECTION
- SectionIn 1 2
+ SectionIn ${FULL_TYPES} ${EXTRACT_TYPES}
SetOutPath "$INSTDIR\doc"
File "${INPDIR}\doc\AUTHORS.txt"
- File "${INPDIR}\doc\CHANGELOG.txt"
+ File "${INPDIR}\doc\ChangeLog.txt"
+ File "${INPDIR}\doc\ChangeLog-5.0-6.0.txt"
File "${INPDIR}\doc\COPYING.txt"
File "${INPDIR}\doc\INSTALL.txt"
File "${INPDIR}\doc\NEWS.txt"
File "${INPDIR}\doc\README.txt"
File "${INPDIR}\doc\TODO.txt"
- File "${INPDIR}\doc\WARNINGS.txt"
- File "${INPDIR}\doc\checksums.txt"
+!ifdef INPDIR64
+ ${If} $X64 != ""
+ File "${INPDIR64}\doc\checksums64.txt"
+ ${Else}
+ File "${INPDIR}\doc\checksums32.txt"
+ ${EndIf}
+!else
+ File "${INPDIR}\doc\checksums??.txt"
+!endif
File "${INPDIR}\doc\smartctl.8.html"
File "${INPDIR}\doc\smartctl.8.txt"
File "${INPDIR}\doc\smartd.8.html"
Section "Uninstaller" UNINST_SECTION
- SectionIn 1
- AddSize 35
+ SectionIn ${FULL_TYPES}
+ AddSize 40
CreateDirectory "$INSTDIR"
- ; Save installation location
- WriteRegStr HKLM "Software\smartmontools" "Install_Dir" "$INSTDIR"
+ ; Keep old Install_Dir registry entry for GSmartControl
+ ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\GSmartControl" "InstallLocation"
+ ReadRegStr $1 HKLM "Software\smartmontools" "Install_Dir"
+ ${If} "$0$1" != ""
+ WriteRegStr HKLM "Software\smartmontools" "Install_Dir" "$INSTDIR"
+ ${EndIf}
; Write uninstall keys and program
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "DisplayName" "smartmontools"
!ifdef VERSTR
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "DisplayVersion" "${VERSTR}"
!endif
- ;WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "Publisher" "smartmontools"
+ WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "InstallLocation" "$INSTDIR"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "UninstallString" '"$INSTDIR\uninst-smartmontools.exe"'
- ;WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "URLInfoAbout" "http://smartmontools.sourceforge.net/"
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "HelpLink" "http://smartmontools.sourceforge.net/"
- ;WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "URLUpdateInfo" "http://sourceforge.net/project/showfiles.php?group_id=64297"
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "URLUpdateInfo" "http://smartmontools-win32.dyndns.org/"
+ WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "Publisher" "smartmontools.org"
+ WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "URLInfoAbout" "https://www.smartmontools.org/"
+ WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "HelpLink" "http://sourceforge.net/projects/smartmontools/support"
+ WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "URLUpdateInfo" "http://builds.smartmontools.org/"
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "NoModify" 1
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "NoRepair" 1
WriteUninstaller "uninst-smartmontools.exe"
Section "Start Menu Shortcuts" MENU_SECTION
- SectionIn 1
+ SectionIn ${FULL_TYPES}
SetShellVarContext all
!macroend
; runcmdu
- IfFileExists "$INSTDIR\bin\smartctl.exe" 0 +2
- IfFileExists "$INSTDIR\bin\smartd.exe" 0 +4
+ ${If} ${FileExists} "$INSTDIR\bin\smartctl.exe"
+ ${OrIf} ${FileExists} "$INSTDIR\bin\smartd.exe"
SetOutPath "$INSTDIR\bin"
- File "${INPDIR}\bin\runcmdu.exe"
- File "${INPDIR}\bin\runcmdu.exe.manifest"
+ !insertmacro FileExe "bin\runcmdu.exe" ""
+ Delete "$INSTDIR\bin\runcmdu.exe.manifest" ; TODO: Remove after smartmontools 6.5
+ ${EndIf}
; smartctl
- IfFileExists "$INSTDIR\bin\smartctl.exe" 0 noctl
+ ${If} ${FileExists} "$INSTDIR\bin\smartctl.exe"
SetOutPath "$INSTDIR\bin"
- IfFileExists "$WINDIR\system32\cmd.exe" 0 nocmd
- !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartctl (Admin CMD).lnk" "$WINDIR\system32\cmd.exe" '/k PATH=$INSTDIR\bin;%PATH%&cd /d "$INSTDIR\bin"'
- nocmd:
+ !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartctl (Admin CMD).lnk" "$WINDIR\system32\cmd.exe" '/k PATH=$INSTDIR\bin;%PATH%&cd /d "$INSTDIR\bin"'
CreateDirectory "$SMPROGRAMS\smartmontools\smartctl Examples"
FileOpen $0 "$SMPROGRAMS\smartmontools\smartctl Examples\!Read this first!.txt" "w"
FileWrite $0 "All the example commands in this directory$\r$\napply to the first drive (sda).$\r$\n"
FileClose $0
- !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartctl Examples\All info (-a).lnk" "$INSTDIR\bin\runcmdu.exe" "smartctl -a sda"
+ !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartctl Examples\All info (-x).lnk" "$INSTDIR\bin\runcmdu.exe" "smartctl -x sda"
!insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartctl Examples\Identify drive (-i).lnk" "$INSTDIR\bin\runcmdu.exe" "smartctl -i sda"
- !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartctl Examples\SMART attributes (-A).lnk" "$INSTDIR\bin\runcmdu.exe" "smartctl -A sda"
+ !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartctl Examples\SMART attributes (-A -f brief).lnk" "$INSTDIR\bin\runcmdu.exe" "smartctl -A -f brief sda"
!insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartctl Examples\SMART capabilities (-c).lnk" "$INSTDIR\bin\runcmdu.exe" "smartctl -c sda"
!insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartctl Examples\SMART health status (-H).lnk" "$INSTDIR\bin\runcmdu.exe" "smartctl -H sda"
!insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartctl Examples\SMART error log (-l error).lnk" "$INSTDIR\bin\runcmdu.exe" "smartctl -l error sda"
!insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartctl Examples\Stop(Abort) selftest (-X).lnk" "$INSTDIR\bin\runcmdu.exe" "smartctl -X sda"
!insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartctl Examples\Turn SMART off (-s off).lnk" "$INSTDIR\bin\runcmdu.exe" "smartctl -s off sda"
!insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartctl Examples\Turn SMART on (-s on).lnk" "$INSTDIR\bin\runcmdu.exe" "smartctl -s on sda"
- noctl:
+ ${EndIf}
; smartd
- IfFileExists "$INSTDIR\bin\smartd.exe" 0 nod
+ ${If} ${FileExists} "$INSTDIR\bin\smartd.exe"
SetOutPath "$INSTDIR\bin"
CreateDirectory "$SMPROGRAMS\smartmontools\smartd Examples"
!insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartd Examples\Daemon start, smartd.log.lnk" "$INSTDIR\bin\runcmdu.exe" "smartd -l local0"
CreateShortCut "$SMPROGRAMS\smartmontools\smartd Examples\smartd.conf (view).lnk" "$EDITOR" "$INSTDIR\bin\smartd.conf"
CreateShortCut "$SMPROGRAMS\smartmontools\smartd Examples\smartd.log (view).lnk" "$EDITOR" "$INSTDIR\bin\smartd.log"
- ; smartd service (not on 9x/ME)
- IfFileExists "$WINDIR\system32\cmd.exe" 0 nosvc
- !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartd Examples\Service install, eventlog, 30min.lnk" "$INSTDIR\bin\runcmdu.exe" "smartd install"
- !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartd Examples\Service install, smartd.log, 10min.lnk" "$INSTDIR\bin\runcmdu.exe" "smartd install -l local0 -i 600"
- !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartd Examples\Service install, smartd.log, 30min.lnk" "$INSTDIR\bin\runcmdu.exe" "smartd install -l local0"
- !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartd Examples\Service remove.lnk" "$INSTDIR\bin\runcmdu.exe" "smartd remove"
- !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartd Examples\Service start.lnk" "$INSTDIR\bin\runcmdu.exe" "net start smartd"
- !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartd Examples\Service stop.lnk" "$INSTDIR\bin\runcmdu.exe" "net stop smartd"
- nosvc:
- nod:
+ ; smartd service
+ !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartd Examples\Service install, eventlog, 30min.lnk" "$INSTDIR\bin\runcmdu.exe" "smartd install"
+ !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartd Examples\Service install, smartd.log, 10min.lnk" "$INSTDIR\bin\runcmdu.exe" "smartd install -l local0 -i 600"
+ !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartd Examples\Service install, smartd.log, 30min.lnk" "$INSTDIR\bin\runcmdu.exe" "smartd install -l local0"
+ !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartd Examples\Service remove.lnk" "$INSTDIR\bin\runcmdu.exe" "smartd remove"
+ !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartd Examples\Service start.lnk" "$INSTDIR\bin\runcmdu.exe" "net start smartd"
+ !insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\smartd Examples\Service stop.lnk" "$INSTDIR\bin\runcmdu.exe" "net stop smartd"
+ ${EndIf}
; Documentation
- IfFileExists "$INSTDIR\doc\README.TXT" 0 nodoc
+ ${If} ${FileExists} "$INSTDIR\doc\README.TXT"
SetOutPath "$INSTDIR\doc"
CreateDirectory "$SMPROGRAMS\smartmontools\Documentation"
CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\smartctl manual page (html).lnk" "$INSTDIR\doc\smartctl.8.html"
CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\smartd manual page (txt).lnk" "$INSTDIR\doc\smartd.8.txt"
CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\smartd.conf manual page (txt).lnk" "$INSTDIR\doc\smartd.conf.5.txt"
CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\smartd.conf sample.lnk" "$EDITOR" "$INSTDIR\doc\smartd.conf"
- IfFileExists "$INSTDIR\bin\drivedb.h" 0 nodb
+ ${If} ${FileExists} "$INSTDIR\bin\drivedb.h"
CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\drivedb.h (view).lnk" "$EDITOR" "$INSTDIR\bin\drivedb.h"
!insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\Documentation\drivedb-add.h (create, edit).lnk" "$EDITOR" "$INSTDIR\bin\drivedb-add.h"
- nodb:
- CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\AUTHORS.lnk" "$INSTDIR\doc\AUTHORS.txt"
- CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\CHANGELOG.lnk" "$INSTDIR\doc\CHANGELOG.txt"
+ ${EndIf}
+ CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\ChangeLog.lnk" "$INSTDIR\doc\ChangeLog.txt"
CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\COPYING.lnk" "$INSTDIR\doc\COPYING.txt"
- CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\INSTALL.lnk" "$INSTDIR\doc\INSTALL.txt"
CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\NEWS.lnk" "$INSTDIR\doc\NEWS.txt"
- CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\README.lnk" "$INSTDIR\doc\README.txt"
- CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\TODO.lnk" "$INSTDIR\doc\TODO.txt"
- CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\WARNINGS.lnk" "$INSTDIR\doc\WARNINGS.txt"
- CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\Windows version download page.lnk" "http://smartmontools-win32.dyndns.org/smartmontools/"
- nodoc:
+ ${EndIf}
; Homepage
- CreateShortCut "$SMPROGRAMS\smartmontools\smartmontools Home Page.lnk" "http://smartmontools.sourceforge.net/"
+ CreateShortCut "$SMPROGRAMS\smartmontools\smartmontools Home Page.lnk" "https://www.smartmontools.org/"
+ CreateShortCut "$SMPROGRAMS\smartmontools\smartmontools Daily Builds.lnk" "http://builds.smartmontools.org/"
; drivedb.h update
- IfFileExists "$INSTDIR\bin\update-smart-drivedb.exe" 0 noupdb
+ ${If} ${FileExists} "$INSTDIR\bin\update-smart-drivedb.exe"
SetOutPath "$INSTDIR\bin"
!insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\drivedb.h update.lnk" "$INSTDIR\bin\update-smart-drivedb.exe" ""
- noupdb:
+ ${EndIf}
; Uninstall
- IfFileExists "$INSTDIR\uninst-smartmontools.exe" 0 noinst
+ ${If} ${FileExists} "$INSTDIR\uninst-smartmontools.exe"
SetOutPath "$INSTDIR"
!insertmacro CreateAdminShortCut "$SMPROGRAMS\smartmontools\Uninstall smartmontools.lnk" "$INSTDIR\uninst-smartmontools.exe" ""
- noinst:
+ ${EndIf}
SectionEnd
Section "Add install dir to PATH" PATH_SECTION
- SectionIn 1
+ SectionIn ${FULL_TYPES}
- IfFileExists "$WINDIR\system32\cmd.exe" 0 +3
- Push "$INSTDIR\bin"
- Call AddToPath
+ Push "$INSTDIR\bin"
+ Call AddToPath
SectionEnd
!macroend
Section "Remove existing entries first" DRIVE_REMOVE_SECTION
- SectionIn 3
+ SectionIn ${DRIVEMENU_TYPE}
!insertmacro DriveMenuRemove
SectionEnd
!macro DriveSection id name args
Section 'smartctl ${args} ...' DRIVE_${id}_SECTION
- SectionIn 3
+ SectionIn ${DRIVEMENU_TYPE}
Call CheckRunCmdA
DetailPrint 'Add drive menu entry "${name}": smartctl ${args} ...'
WriteRegStr HKCR "Drive\shell\smartctl${id}" "" "${name}"
SectionEnd
!macroend
- !insertmacro DriveSection 0 "SMART all info" "-a"
+ !insertmacro DriveSection 0 "SMART all info" "-x"
!insertmacro DriveSection 1 "SMART status" "-Hc"
- !insertmacro DriveSection 2 "SMART attributes" "-A"
+ !insertmacro DriveSection 2 "SMART attributes" "-A -f brief"
!insertmacro DriveSection 3 "SMART short selftest" "-t short"
!insertmacro DriveSection 4 "SMART long selftest" "-t long"
!insertmacro DriveSection 5 "SMART continue selective selftest" '-t "selective,cont"'
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"
; Stop & remove service
- IfFileExists "$INSTDIR\bin\smartd.exe" 0 nosrv
+ ${If} ${FileExists} "$INSTDIR\bin\smartd.exe"
ReadRegStr $0 HKLM "System\CurrentControlSet\Services\smartd" "ImagePath"
- StrCmp $0 "" nosrv
+ ${If} $0 != ""
ExecWait "net stop smartd"
- MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 "Remove smartd service ?" IDYES 0 IDNO nosrv
+ MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 "Remove smartd service ?" /SD IDNO IDYES 0 IDNO +2
ExecWait "$INSTDIR\bin\smartd.exe remove"
- nosrv:
+ ${EndIf}
+ ${EndIf}
; Remove installer registry keys
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools"
DeleteRegKey HKLM "Software\smartmontools"
; Remove conf file ?
- IfFileExists "$INSTDIR\bin\smartd.conf" 0 noconf
+ ${If} ${FileExists} "$INSTDIR\bin\smartd.conf"
; Assume unchanged if timestamp is equal to sample file
GetFileTime "$INSTDIR\bin\smartd.conf" $0 $1
GetFileTime "$INSTDIR\doc\smartd.conf" $2 $3
StrCmp "$0:$1" "$2:$3" +2 0
- MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 "Delete configuration file$\n$INSTDIR\bin\smartd.conf ?" IDYES 0 IDNO noconf
+ MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 "Delete configuration file$\n$INSTDIR\bin\smartd.conf ?" /SD IDNO IDYES 0 IDNO +2
Delete "$INSTDIR\bin\smartd.conf"
- noconf:
+ ${EndIf}
; Remove log file ?
- IfFileExists "$INSTDIR\bin\smartd.log" 0 +3
- MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 "Delete log file$\n$INSTDIR\bin\smartd.log ?" IDYES 0 IDNO +2
+ ${If} ${FileExists} "$INSTDIR\bin\smartd.log"
+ MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 "Delete log file$\n$INSTDIR\bin\smartd.log ?" /SD IDNO IDYES 0 IDNO +2
Delete "$INSTDIR\bin\smartd.log"
+ ${EndIf}
; Remove drivedb-add file ?
- IfFileExists "$INSTDIR\bin\drivedb-add.h" 0 +3
- MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 "Delete local drive database file$\n$INSTDIR\bin\drivedb-add.h ?" IDYES 0 IDNO +2
+ ${If} ${FileExists} "$INSTDIR\bin\drivedb-add.h"
+ MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 "Delete local drive database file$\n$INSTDIR\bin\drivedb-add.h ?" /SD IDNO IDYES 0 IDNO +2
Delete "$INSTDIR\bin\drivedb-add.h"
+ ${EndIf}
; Remove files
Delete "$INSTDIR\bin\smartctl.exe"
Delete "$INSTDIR\bin\smartctl-nc.exe"
Delete "$INSTDIR\bin\smartd.exe"
- Delete "$INSTDIR\bin\syslogevt.exe"
+ Delete "$INSTDIR\bin\smartd_warning.cmd" ; TODO: Check for modifications?
Delete "$INSTDIR\bin\drivedb.h"
Delete "$INSTDIR\bin\drivedb.h.error"
Delete "$INSTDIR\bin\drivedb.h.lastcheck"
Delete "$INSTDIR\bin\smartd-run.bat"
Delete "$INSTDIR\bin\net-run.bat"
Delete "$INSTDIR\bin\runcmda.exe"
- Delete "$INSTDIR\bin\runcmda.exe.manifest"
+ Delete "$INSTDIR\bin\runcmda.exe.manifest" ; TODO: Remove after smartmontools 6.5
Delete "$INSTDIR\bin\runcmdu.exe"
- Delete "$INSTDIR\bin\runcmdu.exe.manifest"
+ Delete "$INSTDIR\bin\runcmdu.exe.manifest" ; TODO: Remove after smartmontools 6.5
+ Delete "$INSTDIR\bin\wtssendmsg.exe"
Delete "$INSTDIR\doc\AUTHORS.txt"
- Delete "$INSTDIR\doc\CHANGELOG.txt"
+ Delete "$INSTDIR\doc\ChangeLog.txt"
+ Delete "$INSTDIR\doc\ChangeLog-5.0-6.0.txt"
Delete "$INSTDIR\doc\COPYING.txt"
Delete "$INSTDIR\doc\INSTALL.txt"
Delete "$INSTDIR\doc\NEWS.txt"
Delete "$INSTDIR\doc\README.txt"
Delete "$INSTDIR\doc\TODO.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.txt"
Delete "$INSTDIR\doc\smartd.8.html"
RMDir "$INSTDIR"
; Remove install dir from PATH
- IfFileExists "$WINDIR\system32\cmd.exe" 0 +3
- Push "$INSTDIR\bin"
- Call un.RemoveFromPath
+ Push "$INSTDIR\bin"
+ Call un.RemoveFromPath
; Remove drive menu registry entries
!insertmacro DriveMenuRemove
; Check for still existing entries
- IfFileExists "$INSTDIR\bin\smartd.exe" 0 +3
- MessageBox MB_OK|MB_ICONEXCLAMATION "$INSTDIR\bin\smartd.exe could not be removed.$\nsmartd is possibly still running."
- Goto +3
- IfFileExists "$INSTDIR" 0 +2
- MessageBox MB_OK "Note: $INSTDIR could not be removed."
+ ${If} ${FileExists} "$INSTDIR\bin\smartd.exe"
+ MessageBox MB_OK|MB_ICONEXCLAMATION "$INSTDIR\bin\smartd.exe could not be removed.$\nsmartd is possibly still running." /SD IDOK
+ ${ElseIf} ${FileExists} "$INSTDIR"
+ MessageBox MB_OK "Note: $INSTDIR could not be removed." /SD IDOK
+ ${EndIf}
- IfFileExists "$SMPROGRAMS\smartmontools" 0 +2
- MessageBox MB_OK "Note: $SMPROGRAMS\smartmontools could not be removed."
+ ${If} ${FileExists} "$SMPROGRAMS\smartmontools"
+ MessageBox MB_OK "Note: $SMPROGRAMS\smartmontools could not be removed." /SD IDOK
+ ${EndIf}
SectionEnd
;--------------------------------------------------------------------
; Functions
+!macro AdjustSectionSize section
+ SectionGetSize ${section} $0
+ IntOp $0 $0 / 2
+ SectionSetSize ${section} $0
+!macroend
+
Function .onInit
+ ; Set default install directories
+ ${If} $INSTDIR == "" ; /D=PATH option not specified ?
+ ReadRegStr $INSTDIR HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "InstallLocation"
+ ${If} $INSTDIR == "" ; Not already installed ?
+ ReadRegStr $INSTDIR HKLM "Software\smartmontools" "Install_Dir"
+ ${If} $INSTDIR == "" ; Not already installed (smartmontools < r3911/6.3) ?
+ StrCpy $INSTDIR "$PROGRAMFILES\smartmontools"
+!ifdef INPDIR64
+ StrCpy $INSTDIR32 $INSTDIR
+ StrCpy $INSTDIR64 "$PROGRAMFILES64\smartmontools"
+!endif
+ ${EndIf}
+ ${EndIf}
+ ${EndIf}
+
+!ifdef INPDIR64
+ ; Check for 64-bit unless already installed in 32-bit location
+ ${If} $INSTDIR64 != ""
+ ${OrIf} $INSTDIR != "$PROGRAMFILES\smartmontools"
+ ; $1 = IsWow64Process(GetCurrentProcess(), ($0=FALSE, &$0))
+ System::Call "kernel32::GetCurrentProcess() i.s"
+ System::Call "kernel32::IsWow64Process(i s, *i 0 r0) i.r1"
+ ${If} "$0 $1" == "1 1" ; 64-bit Windows ?
+ !insertmacro SelectSection ${X64_SECTION}
+ ${EndIf}
+ ${EndIf}
+
+ ; 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
StrCpy $EDITOR "$PROGRAMFILES\Notepad++\notepad++.exe"
- IfFileExists "$EDITOR" +2 0
+ ${IfNot} ${FileExists} "$EDITOR"
StrCpy $EDITOR "notepad.exe"
+ ${EndIf}
+
+ Call ParseCmdLine
- ; 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"
+!ifdef INPDIR64
+ Call CheckX64
+!endif
+FunctionEnd
- ; Hide "Add install dir to PATH" on 9x/ME
- IfFileExists "$WINDIR\system32\cmd.exe" +2 0
- SectionSetText ${PATH_SECTION} ""
+; Check x64 section and update INSTDIR accordingly
- Call ParseCmdLine
+!ifdef INPDIR64
+Function CheckX64
+ ${IfNot} ${SectionIsSelected} ${X64_SECTION}
+ StrCpy $X64 ""
+ ${If} $INSTDIR32 != ""
+ ${AndIf} $INSTDIR == $INSTDIR64
+ StrCpy $INSTDIR $INSTDIR32
+ ${EndIf}
+ ${Else}
+ StrCpy $X64 "t"
+ ${If} $INSTDIR64 != ""
+ ${AndIf} $INSTDIR == $INSTDIR32
+ StrCpy $INSTDIR $INSTDIR64
+ ${EndIf}
+ ${EndIf}
FunctionEnd
+!endif
; Command line parsing
-!macro CheckCmdLineOption name section
- StrCpy $allopts "$allopts,${name}"
+
+!macro GetCmdLineOption var name
Push ",$opts,"
Push ",${name},"
Call StrStr
- Pop $0
- StrCmp $0 "" 0 sel_${name}
- !insertmacro UnselectSection ${section}
- Goto done_${name}
-sel_${name}:
- !insertmacro SelectSection ${section}
- StrCpy $nomatch ""
-done_${name}:
+ Pop ${var}
+ ${If} ${var} != ""
+ StrCpy $nomatch ""
+ ${EndIf}
+!macroend
+
+!macro CheckCmdLineOption name section
+ StrCpy $allopts "$allopts,${name}"
+ !insertmacro GetCmdLineOption $0 ${name}
+ ${If} $0 == ""
+ !insertmacro UnselectSection ${section}
+ ${Else}
+ !insertmacro SelectSection ${section}
+ ${EndIf}
!macroend
Function ParseCmdLine
Var /global opts
${GetParameters} $R0
${GetOptions} $R0 "/SO" $opts
- IfErrors 0 +2
+ ${If} ${Errors}
Return
+ ${EndIf}
Var /global allopts
- StrCpy $allopts ""
Var /global nomatch
StrCpy $nomatch "t"
- ; turn sections on or off
+!ifdef INPDIR64
+ ; Change previous 64-bit setting
+ StrCpy $allopts ",x32|x64"
+ !insertmacro GetCmdLineOption $0 "x32"
+ ${If} $0 != ""
+ !insertmacro UnselectSection ${X64_SECTION}
+ ${EndIf}
+ !insertmacro GetCmdLineOption $0 "x64"
+ ${If} $0 != ""
+ !insertmacro SelectSection ${X64_SECTION}
+ ${EndIf}
+ ; Leave other sections unchanged if only "x32" or "x64" is specified
+ ${If} $opts == "x32"
+ ${OrIf} $opts == "x64"
+ Return
+ ${EndIf}
+!endif
+ ; Turn sections on or off
!insertmacro CheckCmdLineOption "smartctl" ${SMARTCTL_SECTION}
!insertmacro CheckCmdLineOption "smartd" ${SMARTD_SECTION}
!insertmacro CheckCmdLineOption "smartctlnc" ${SMARTCTL_NC_SECTION}
!insertmacro CheckCmdLineOption "drive3" ${DRIVE_3_SECTION}
!insertmacro CheckCmdLineOption "drive4" ${DRIVE_4_SECTION}
!insertmacro CheckCmdLineOption "drive5" ${DRIVE_5_SECTION}
- !insertmacro CheckCmdLineOption "ubcd" ${UBCD_SECTION}
- StrCmp $opts "-" done
- StrCmp $nomatch "" done
- StrCpy $0 "$allopts,-" "" 1
- MessageBox MB_OK "Usage: smartmontools-VERSION.win32-setup [/S] [/SO component,...] [/D=INSTDIR]$\n$\ncomponents:$\n $0"
- Abort
-done:
-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:
+ ${If} $opts != "-"
+ ${If} $nomatch != ""
+ StrCpy $0 "$allopts,-" "" 1
+ MessageBox MB_OK "Usage: smartmontools-VERSION.win32-setup [/S] [/SO component,...] [/D=INSTDIR]$\n$\ncomponents:$\n $0"
+ Abort
+ ${EndIf}
+ ${EndIf}
FunctionEnd
-
-; Install runcmda.exe if missing
+; Install runcmda.exe only once
Function CheckRunCmdA
- IfFileExists "$INSTDIR\bin\runcmda.exe" done 0
+ Var /global runcmda
+ ${If} $runcmda == ""
+ StrCpy $runcmda "t"
SetOutPath "$INSTDIR\bin"
- File "${INPDIR}\bin\runcmda.exe"
- File "${INPDIR}\bin\runcmda.exe.manifest"
- done:
+ !insertmacro FileExe "bin\runcmda.exe" ""
+ Delete "$INSTDIR\bin\runcmda.exe.manifest" ; TODO: Remove after smartmontools 6.5
+ ${EndIf}
FunctionEnd
Push $1
Push $2
Push $3
+ Push $4
- ReadRegStr $1 ${Environ} "PATH"
+ ; NSIS ReadRegStr returns empty string on string overflow
+ ; Native calls are used here to check actual length of PATH
+
+ ; $4 = RegOpenKey(HKEY_CURRENT_USER, "Environment", &$3)
+ System::Call "advapi32::RegOpenKey(i 0x80000001, t'Environment', *i.r3) i.r4"
+ IntCmp $4 0 0 done done
+ ; $4 = RegQueryValueEx($3, "PATH", (DWORD*)0, (DWORD*)0, &$1, ($2=NSIS_MAX_STRLEN, &$2))
+ ; RegCloseKey($3)
+ System::Call "advapi32::RegQueryValueEx(i $3, t'PATH', i 0, i 0, t.r1, *i ${NSIS_MAX_STRLEN} r2) i.r4"
+ System::Call "advapi32::RegCloseKey(i $3)"
+
+ ${If} $4 = 234 ; ERROR_MORE_DATA
+ DetailPrint "AddToPath: original length $2 > ${NSIS_MAX_STRLEN}"
+ MessageBox MB_OK "PATH not updated, original length $2 > ${NSIS_MAX_STRLEN}" /SD IDOK
+ Goto done
+ ${EndIf}
+
+ ${If} $4 <> 0 ; NO_ERROR
+ ${If} $4 <> 2 ; ERROR_FILE_NOT_FOUND
+ DetailPrint "AddToPath: unexpected error code $4"
+ Goto done
+ ${EndIf}
+ StrCpy $1 ""
+ ${EndIf}
+
+ ; Check if already in PATH
Push "$1;"
Push "$0;"
Call StrStr
Pop $2
StrCmp $2 "" 0 done
+ ; Prevent NSIS string overflow
+ StrLen $2 $0
+ StrLen $3 $1
+ IntOp $2 $2 + $3
+ IntOp $2 $2 + 2 ; $2 = strlen(dir) + strlen(PATH) + sizeof(";")
+ ${If} $2 > ${NSIS_MAX_STRLEN}
+ DetailPrint "AddToPath: new length $2 > ${NSIS_MAX_STRLEN}"
+ MessageBox MB_OK "PATH not updated, new length $2 > ${NSIS_MAX_STRLEN}." /SD IDOK
+ Goto done
+ ${EndIf}
+
+ ; Append dir to PATH
DetailPrint "Add to PATH: $0"
StrCpy $2 $1 1 -1
- StrCmp $2 ";" 0 +2
+ ${If} $2 == ";"
StrCpy $1 $1 -1 ; remove trailing ';'
- StrCmp $1 "" +2 ; no leading ';'
+ ${EndIf}
+ ${If} $1 != "" ; no leading ';'
StrCpy $0 "$1;$0"
+ ${EndIf}
WriteRegExpandStr ${Environ} "PATH" $0
SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
done:
+ Pop $4
Pop $3
Pop $2
Pop $1
ReadRegStr $1 ${Environ} "PATH"
StrCpy $5 $1 1 -1
- StrCmp $5 ";" +2
+ ${If} $5 != ";"
StrCpy $1 "$1;" ; ensure trailing ';'
+ ${EndIf}
Push $1
Push "$0;"
Call un.StrStr
StrCpy $6 $2 "" $3 ; $6 is now the part after the path to remove
StrCpy $3 "$5$6"
StrCpy $5 $3 1 -1
- StrCmp $5 ";" 0 +2
+ ${If} $5 == ";"
StrCpy $3 $3 -1 ; remove trailing ';'
+ ${EndIf}
WriteRegExpandStr ${Environ} "PATH" $3
SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
StrCpy $R4 0
; $R1=substring, $R2=string, $R3=strlen(substring)
; $R4=count, $R5=tmp
- loop:
+ ${Do}
StrCpy $R5 $R2 $R3 $R4
- StrCmp $R5 $R1 done
- StrCmp $R5 "" done
+ ${IfThen} $R5 == $R1 ${|} ${ExitDo} ${|}
+ ${IfThen} $R5 == "" ${|} ${ExitDo} ${|}
IntOp $R4 $R4 + 1
- Goto loop
-done:
+ ${Loop}
StrCpy $R1 $R2 "" $R4
Pop $R5
Pop $R4
; http://nsis.sourceforge.net/IShellLink_Set_RunAs_flag
;
-!include "LogicLib.nsh"
-
!define IPersistFile {0000010b-0000-0000-c000-000000000046}
!define CLSID_ShellLink {00021401-0000-0000-C000-000000000046}
!define IID_IShellLinkA {000214EE-0000-0000-C000-000000000046}
!endif
Function ShellLinkSetRunAs
+ ; Set archive location of $PLUGINSDIR
+ Goto +2
+ SetOutPath "$INSTDIR"
+
System::Store S ; push $0-$9, $R0-$R9
pop $9
; $0 = CoCreateInstance(CLSID_ShellLink, 0, CLSCTX_INPROC_SERVER, IID_IShellLink, &$1)
${Else}
DetailPrint "Set RunAsAdmin: $9"
${EndIf}
- System::Store L ; push $0-$9, $R0-$R9
+ System::Store L ; pop $R9-$R0, $9-$0
FunctionEnd