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