]>
Commit | Line | Data |
---|---|---|
4d59bff9 | 1 | ; |
cfbba5b9 | 2 | ; smartmontools install NSIS script |
4d59bff9 | 3 | ; |
cfbba5b9 | 4 | ; Home page of code is: http://smartmontools.sourceforge.net |
4d59bff9 | 5 | ; |
cfbba5b9 | 6 | ; Copyright (C) 2006-11 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 | ; | |
d008864d | 16 | ; $Id: installer.nsi 3457 2011-10-20 16:36:47Z chrfranke $ |
4d59bff9 GG |
17 | ; |
18 | ||
19 | ||
20 | ;-------------------------------------------------------------------- | |
21 | ; Command line arguments: | |
cfbba5b9 | 22 | ; makensis -DINPDIR=<input-dir> -DOUTFILE=<output-file> -DVERSTR=<version-string> installer.nsi |
4d59bff9 GG |
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" | |
d008864d GI |
45 | |
46 | Var EDITOR | |
a37e7145 | 47 | Var UBCDDIR |
4d59bff9 GG |
48 | |
49 | LicenseData "${INPDIR}\doc\COPYING.txt" | |
50 | ||
a7e8ffec GI |
51 | !include "FileFunc.nsh" |
52 | !include "Sections.nsh" | |
53 | ||
54 | !insertmacro GetParameters | |
55 | !insertmacro GetOptions | |
56 | ||
57 | RequestExecutionLevel admin | |
58 | ||
4d59bff9 GG |
59 | ;-------------------------------------------------------------------- |
60 | ; Pages | |
61 | ||
62 | Page license | |
63 | Page components | |
a37e7145 GG |
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 | |
4d59bff9 GG |
70 | Page instfiles |
71 | ||
72 | UninstPage uninstConfirm | |
73 | UninstPage instfiles | |
74 | ||
75 | InstType "Full" | |
76 | InstType "Extract files only" | |
a37e7145 GG |
77 | InstType "Drive menu" |
78 | InstType "UBCD4Win plugin" | |
4d59bff9 GG |
79 | |
80 | ||
81 | ;-------------------------------------------------------------------- | |
82 | ; Sections | |
83 | ||
a37e7145 | 84 | SectionGroup "!Program files" |
4d59bff9 | 85 | |
a37e7145 | 86 | Section "smartctl" SMARTCTL_SECTION |
4d59bff9 GG |
87 | |
88 | SectionIn 1 2 | |
89 | ||
90 | SetOutPath "$INSTDIR\bin" | |
91 | File "${INPDIR}\bin\smartctl.exe" | |
92 | ||
93 | SectionEnd | |
94 | ||
a37e7145 | 95 | Section "smartd" SMARTD_SECTION |
4d59bff9 GG |
96 | |
97 | SectionIn 1 2 | |
98 | ||
99 | SetOutPath "$INSTDIR\bin" | |
a37e7145 GG |
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: | |
4d59bff9 GG |
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 | ||
a37e7145 GG |
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 | ||
4d59bff9 GG |
122 | SectionEnd |
123 | ||
2127e193 GI |
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 | ||
cfbba5b9 GI |
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 | ||
4d59bff9 GG |
143 | SectionGroupEnd |
144 | ||
a37e7145 | 145 | Section "!Documentation" DOC_SECTION |
4d59bff9 GG |
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" | |
cfbba5b9 | 158 | File "${INPDIR}\doc\checksums.txt" |
4d59bff9 GG |
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 | ||
a37e7145 | 169 | Section "Uninstaller" UNINST_SECTION |
4d59bff9 GG |
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" | |
2127e193 GI |
181 | !ifdef VERSTR |
182 | WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "DisplayVersion" "${VERSTR}" | |
183 | !endif | |
a37e7145 | 184 | ;WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "Publisher" "smartmontools" |
4d59bff9 | 185 | WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" "UninstallString" '"$INSTDIR\uninst-smartmontools.exe"' |
a37e7145 GG |
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/" | |
4d59bff9 GG |
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 | ||
a37e7145 | 196 | Section "Start Menu Shortcuts" MENU_SECTION |
4d59bff9 GG |
197 | |
198 | SectionIn 1 | |
199 | ||
a7e8ffec GI |
200 | SetShellVarContext all |
201 | ||
4d59bff9 GG |
202 | CreateDirectory "$SMPROGRAMS\smartmontools" |
203 | ||
d008864d GI |
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 | ||
4d59bff9 GG |
217 | ; smartctl |
218 | IfFileExists "$INSTDIR\bin\smartctl.exe" 0 noctl | |
219 | SetOutPath "$INSTDIR\bin" | |
d008864d GI |
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: | |
4d59bff9 GG |
223 | CreateDirectory "$SMPROGRAMS\smartmontools\smartctl Examples" |
224 | FileOpen $0 "$SMPROGRAMS\smartmontools\smartctl Examples\!Read this first!.txt" "w" | |
a37e7145 | 225 | FileWrite $0 "All the example commands in this directory$\r$\napply to the first drive (sda).$\r$\n" |
4d59bff9 | 226 | FileClose $0 |
d008864d GI |
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" | |
4d59bff9 GG |
240 | noctl: |
241 | ||
242 | ; smartd | |
243 | IfFileExists "$INSTDIR\bin\smartd.exe" 0 nod | |
244 | SetOutPath "$INSTDIR\bin" | |
4d59bff9 | 245 | CreateDirectory "$SMPROGRAMS\smartmontools\smartd Examples" |
d008864d GI |
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" | |
4d59bff9 GG |
254 | |
255 | ; smartd service (not on 9x/ME) | |
256 | IfFileExists "$WINDIR\system32\cmd.exe" 0 nosvc | |
d008864d GI |
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" | |
4d59bff9 GG |
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" | |
d008864d GI |
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: | |
4d59bff9 GG |
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" | |
a37e7145 | 289 | CreateShortCut "$SMPROGRAMS\smartmontools\Documentation\Windows version download page.lnk" "http://smartmontools-win32.dyndns.org/smartmontools/" |
4d59bff9 GG |
290 | nodoc: |
291 | ||
292 | ; Homepage | |
293 | CreateShortCut "$SMPROGRAMS\smartmontools\smartmontools Home Page.lnk" "http://smartmontools.sourceforge.net/" | |
294 | ||
cfbba5b9 | 295 | ; drivedb.h update |
d008864d GI |
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: | |
cfbba5b9 | 300 | |
4d59bff9 | 301 | ; Uninstall |
d008864d GI |
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: | |
4d59bff9 GG |
306 | |
307 | SectionEnd | |
308 | ||
a37e7145 | 309 | Section "Add install dir to PATH" PATH_SECTION |
4d59bff9 GG |
310 | |
311 | SectionIn 1 | |
312 | ||
313 | IfFileExists "$WINDIR\system32\cmd.exe" 0 +3 | |
314 | Push "$INSTDIR\bin" | |
315 | Call AddToPath | |
316 | ||
317 | SectionEnd | |
318 | ||
a37e7145 GG |
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 | ||
a7e8ffec | 331 | Section "Remove existing entries first" DRIVE_REMOVE_SECTION |
a37e7145 GG |
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 | |
d008864d | 339 | Call CheckRunCmdA |
a37e7145 GG |
340 | DetailPrint 'Add drive menu entry "${name}": smartctl ${args} ...' |
341 | WriteRegStr HKCR "Drive\shell\smartctl${id}" "" "${name}" | |
d008864d | 342 | WriteRegStr HKCR "Drive\shell\smartctl${id}\command" "" '"$INSTDIR\bin\runcmda.exe" "$INSTDIR\bin\smartctl.exe" ${args} %L' |
a37e7145 GG |
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&' | |
d008864d | 382 | FileWrite $0 'set PATH=@GetProgramDrive()\Programs\smartmontools;%PATH% ">' |
a37e7145 GG |
383 | FileWrite $0 'smartctl</MITEM>$\r$\n$\t</MENU>$\r$\n</NU2MENU>$\r$\n' |
384 | FileClose $0 | |
385 | ||
386 | SetOutPath "$UBCDDIR\files" | |
a37e7145 GG |
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 | ||
4d59bff9 GG |
398 | ;-------------------------------------------------------------------- |
399 | ||
400 | Section "Uninstall" | |
401 | ||
a37e7145 GG |
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 | |
4d59bff9 GG |
412 | DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\smartmontools" |
413 | DeleteRegKey HKLM "Software\smartmontools" | |
414 | ||
cfbba5b9 | 415 | ; Remove conf file ? |
4d59bff9 GG |
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 | ||
cfbba5b9 | 425 | ; Remove log file ? |
4d59bff9 GG |
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 | ||
cfbba5b9 GI |
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 | ||
4d59bff9 GG |
435 | ; Remove files |
436 | Delete "$INSTDIR\bin\smartctl.exe" | |
2127e193 | 437 | Delete "$INSTDIR\bin\smartctl-nc.exe" |
4d59bff9 GG |
438 | Delete "$INSTDIR\bin\smartd.exe" |
439 | Delete "$INSTDIR\bin\syslogevt.exe" | |
cfbba5b9 GI |
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" | |
4d59bff9 GG |
445 | Delete "$INSTDIR\bin\smartctl-run.bat" |
446 | Delete "$INSTDIR\bin\smartd-run.bat" | |
447 | Delete "$INSTDIR\bin\net-run.bat" | |
d008864d GI |
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" | |
4d59bff9 GG |
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" | |
cfbba5b9 | 460 | Delete "$INSTDIR\doc\checksums.txt" |
4d59bff9 GG |
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 | |
a7e8ffec | 471 | SetShellVarContext all |
4d59bff9 GG |
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" | |
a37e7145 GG |
479 | RMDir "$SMPROGRAMS\smartmontools\smartctl Examples" |
480 | RMDir "$SMPROGRAMS\smartmontools\smartd Examples" | |
4d59bff9 GG |
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 | ||
a37e7145 GG |
491 | ; Remove drive menu registry entries |
492 | !insertmacro DriveMenuRemove | |
493 | ||
494 | ; Check for still existing entries | |
4d59bff9 GG |
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 | ||
a37e7145 GG |
501 | IfFileExists "$SMPROGRAMS\smartmontools" 0 +2 |
502 | MessageBox MB_OK "Note: $SMPROGRAMS\smartmontools could not be removed." | |
503 | ||
4d59bff9 GG |
504 | SectionEnd |
505 | ||
506 | ;-------------------------------------------------------------------- | |
a37e7145 | 507 | ; Functions |
4d59bff9 GG |
508 | |
509 | Function .onInit | |
510 | ||
d008864d GI |
511 | ; Use Notepad++ if installed |
512 | StrCpy $EDITOR "$PROGRAMFILES\Notepad++\notepad++.exe" | |
513 | IfFileExists "$EDITOR" +2 0 | |
514 | StrCpy $EDITOR "notepad.exe" | |
515 | ||
a37e7145 GG |
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 | ||
4d59bff9 GG |
522 | ; Hide "Add install dir to PATH" on 9x/ME |
523 | IfFileExists "$WINDIR\system32\cmd.exe" +2 0 | |
a37e7145 | 524 | SectionSetText ${PATH_SECTION} "" |
4d59bff9 | 525 | |
a7e8ffec GI |
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: | |
4d59bff9 GG |
579 | FunctionEnd |
580 | ||
a37e7145 GG |
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} | |
2127e193 | 591 | !insertmacro CheckSection ${SMARTCTL_NC_SECTION} |
a37e7145 | 592 | !insertmacro CheckSection ${SMARTD_SECTION} |
cfbba5b9 | 593 | !insertmacro CheckSection ${DRIVEDB_SECTION} |
a37e7145 GG |
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 | ||
d008864d | 614 | ; Install runcmda.exe if missing |
cfbba5b9 | 615 | |
d008864d GI |
616 | Function CheckRunCmdA |
617 | IfFileExists "$INSTDIR\bin\runcmda.exe" done 0 | |
cfbba5b9 | 618 | SetOutPath "$INSTDIR\bin" |
d008864d GI |
619 | File "${INPDIR}\bin\runcmda.exe" |
620 | File "${INPDIR}\bin\runcmda.exe.manifest" | |
cfbba5b9 GI |
621 | done: |
622 | FunctionEnd | |
623 | ||
4d59bff9 GG |
624 | |
625 | ;-------------------------------------------------------------------- | |
a37e7145 | 626 | ; Path functions |
4d59bff9 GG |
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 | |
a37e7145 | 654 | |
4d59bff9 GG |
655 | ReadRegStr $1 ${Environ} "PATH" |
656 | Push "$1;" | |
657 | Push "$0;" | |
658 | Call StrStr | |
659 | Pop $2 | |
a37e7145 | 660 | StrCmp $2 "" 0 done |
4d59bff9 GG |
661 | Push "$1;" |
662 | Push "$0\;" | |
663 | Call StrStr | |
664 | Pop $2 | |
a37e7145 GG |
665 | StrCmp $2 "" 0 done |
666 | ||
4d59bff9 GG |
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 | |
a37e7145 | 675 | |
4d59bff9 GG |
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 | |
a37e7145 | 689 | |
4d59bff9 GG |
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 | |
a37e7145 | 698 | |
4d59bff9 GG |
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" | |
a37e7145 | 739 | |
4d59bff9 GG |
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." | |
d008864d GI |
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 |