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