NSIS完整实例(含服务的安装,运行前卸载)
# NetHalt - NSIS installer script # Copyright (C) 2008 Daniel Collins <solemnwarning@solemnwarning.net> # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # * Neither the name of the author nor the names of its contributors may # be used to endorse or promote products derived from this software # without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. !include MUI2.nsh !include LogicLib.nsh !include nsDialogs.nsh Name "NetHalt" OutFile "nhclient.exe" InstallDir $PROGRAMFILES\NetHalt InstallDirRegKey HKLM "SOFTWARE\NetHalt" "InstallDir" !define MUI_ABORTWARNING !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "COPYING" !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_LANGUAGE "English" Function .onInit nsisos::osversion ${If} $0 < 5 MessageBox MB_OK "Windows 2000 (NT 5.0) or greater is required" Abort ${EndIf} FunctionEnd # Do local install # Section "NetHalt" SetShellVarContext all SetOutPath $INSTDIR # Stop all running nhtray.exe processes # StrCpy $0 "nhtray.exe" KillProc::KillProcesses # Check if the NetHalt service is installed # SimpleSC::ExistsService "nhclient" Pop $0 # Stop+Remove the NetHalt service if it's installed # ${If} $0 == 0 DetailPrint "Stopping NetHalt Client service..." SimpleSC::StopService "nhclient" DetailPrint "Removing NetHalt Client service..." SimpleSC::RemoveService "nhclient" ${EndIf} WriteRegStr HKLM "SOFTWARE\NetHalt" "InstallDir" $INSTDIR cinst::reg_write "dword" "SOFTWARE\NetHalt" "use_server" "0" cinst::reg_write "string" "SOFTWARE\NetHalt" "server_name" "" cinst::reg_write "dword" "SOFTWARE\NetHalt" "server_port" "0" cinst::reg_write "dword" "SOFTWARE\NetHalt" "server_refresh" "1800" cinst::reg_write "dword" "SOFTWARE\NetHalt" "warning" "300" cinst::reg_write "dword" "SOFTWARE\NetHalt" "abort" "0" cinst::reg_write "dword" "SOFTWARE\NetHalt" "delay" "0" cinst::reg_write "string" "SOFTWARE\NetHalt" "sdtimes" "" WriteUninstaller "$INSTDIR\uninstall.exe" File "src\nhclient.exe" File "src\evlog.dll" File "src\nhtray.exe" File "src\nhconfig.exe" # Add the event log source (evlog.dll) to the registry # WriteRegStr HKLM "SYSTEM\CurrentControlSet\Services\Eventlog\Application\NetHalt Client" "EventMessageFile" "$INSTDIR\evlog.dll" WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Services\Eventlog\Application\NetHalt Client" "TypesSupported" 0x00000007 # Add the uninstaller to Add/Remove programs # WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NetHalt" "DisplayName" "NetHalt" WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NetHalt" "UninstallString" "$INSTDIR\uninstall.exe" WriteRegDWORD HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NetHalt" "NoModify" 1 WriteRegDWORD HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NetHalt" "NoRepair" 1 # Install and start the NetHalt service # TODO: Check for errors # DetailPrint "Installing NetHalt Client service..." SimpleSC::InstallService "nhclient" "NetHalt Client" "16" "2" "$INSTDIR\nhclient.exe" "" "" "" DetailPrint "Starting NetHalt Client service..." SimpleSC::StartService "nhclient" # Add nhtray.exe to the registry to run at login # WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" "NetHalt" "$INSTDIR\nhtray.exe" # Launch nhtray.exe # Exec '"$INSTDIR\nhtray.exe"' # Create shortcuts # CreateDirectory "$SMPROGRAMS\NetHalt" CreateShortCut "$SMPROGRAMS\NetHalt\Tray Icon.lnk" "$INSTDIR\nhtray.exe" CreateShortCut "$SMPROGRAMS\NetHalt\Configuration.lnk" "$INSTDIR\nhconfig.exe" CreateShortCut "$SMPROGRAMS\NetHalt\Uninstall.lnk" "$INSTDIR\uninstall.exe" SectionEnd Function un.onInit SetShellVarContext all ReadRegStr $INSTDIR HKLM "SOFTWARE\NetHalt" "InstallDir" MessageBox MB_YESNO "This will uninstall NetHalt, continue?" IDYES NoAbort Abort NoAbort: FunctionEnd Section "Uninstall" # Stop and remove the NetHalt service # DetailPrint "Stopping NetHalt Client service..." SimpleSC::StopService "nhclient" DetailPrint "Removing NetHalt Client service..." SimpleSC::RemoveService "nhclient" # Stop all running nhtray.exe processes # StrCpy $0 "nhtray.exe" KillProc::KillProcesses # Delete shortcuts # Delete "$SMPROGRAMS\NetHalt\Tray Icon.lnk" Delete "$SMPROGRAMS\NetHalt\Configuration.lnk" Delete "$SMPROGRAMS\NetHalt\Un-Install.lnk" Delete "$SMPROGRAMS\NetHalt" DeleteRegValue HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" "NetHalt" DeleteRegKey HKLM "SYSTEM\CurrentControlSet\Services\Eventlog\Application\NetHalt Client" DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NetHalt" Delete "$INSTDIR\nhclient.exe" Delete "$INSTDIR\evlog.dll" Delete "$INSTDIR\nhtray.exe" Delete "$INSTDIR\uninstall.exe" RMDir $INSTDIR SectionEnd