脚本:蓝色网际的Winamp安装包

优质
小牛编辑
122浏览
2023-12-01
引用Winamp.nsi的内容:

#######################################################################################
# 编译: 必须使用 NSIS 2.01 或以上版本

# 自定义设置,版本号等等
!define VERSION "5.05"
!define VERSION_NUM "505"

# 至少定义一个版本,至多定义一个版本
# 定义一个版本的同时,注释另外两个版本的定义
!define INSTALLER_FULL		;定义完整版
;!define INSTALLER_PRO		;定义专业版
;!define INSTALLER_LITE		;定义精简版

# 定义是否使用 LogSet 指令,默认为启用
# 如果定义你还需要一个启用了 LogSet 指令的特别版 makensis.exe
# 地址: http://nsis.sourceforge.net/download/specialbuilds/
# 定义 LogSet 后可以根据安装时创建的记录文件在卸载时自动删除文件而不需要手动加入删除指令
# 使用了 File,CreateShortCut 指令产生的文件在卸载时都会被自动删除
# 如果需要上面所述的功能,取消定义前的注释,如果不需要,注释下面的定义
!define LOG_SET_SUPPORT

# 定义是否使用是否把许可页面的文本框里的字体设为 Tahoma 8,默认为启用
# 如果许可文本是全英文或英文占多数的话 Tahoma 8 会有较好的显示效果
# 此定义可以越过 NSIS 所使用语言的字体控制,但仅对许可页面的文本有效
# 取消此定义则许可页面文本使用所使用语系的默认字体(由 NSIS 语言文件控制)
# 如果需要上面所述的功能,取消定义前的注释,如果不需要,注释下面的定义
!define LICENSE_PAGE_CHANGE_FONT

# 定义是否在启动时是否要选择语言,默认为禁用
# 如果需要上面所述的功能,取消定义前的注释,如果不需要,注释下面的定义
;!define LANGUAGE_SELECT_SUPPORT

#######################################################################################


!ifdef INSTALLER_FULL	
	!ifdef INSTALLER_LITE | INSTALLER_PRO
		!error "INSTALLER_FULL、INSTALLER_PRO、INSTALLER_LITE 中只能定义一个。"
	!endif
	!define GAYDATA "gaydata.ini"
	!define FILE_NAME "Winamp${VERSION_NUM}_full"
!endif

!ifdef INSTALLER_PRO	
	!ifdef INSTALLER_FULL | INSTALLER_LITE
		!error "INSTALLER_FULL、INSTALLER_PRO、INSTALLER_LITE 中只能定义一个。"
	!endif
	!define GAYDATA "gaydata.ini"
	!define FILE_NAME "Winamp${VERSION_NUM}_pro"
!endif	

!ifdef INSTALLER_LITE	
	!ifdef INSTALLER_FULL | INSTALLER_PRO
		!error "INSTALLER_FULL、INSTALLER_PRO、INSTALLER_LITE 中只能定义一个。"
	!endif
	!define GAYDATA "gaydata_lite.ini"
	!define FILE_NAME "Winamp${VERSION_NUM}_lite"
!endif	

!ifndef INSTALLER_FULL & INSTALLER_PRO & INSTALLER_LITE
	!error "请定义 INSTALLER_FULL、INSTALLER_PRO、INSTALLER_LITE 中的一个。"
!endif	
	
;----------------------------------安装程序属性
Name                 "Winamp"
OutFile              "${FILE_NAME}.exe"
SetCompressor        lzma
BrandingText         "$(BRANDING_TEXT)"
InstallDir           "$PROGRAMFILES\Winamp"
InstallDirRegKey     HKCU "Software\Winamp" ""

Var HWND
Var INTERNET

ReserveFile          ".\resource\${GAYDATA}"
ReserveFile          ".\resource\opt2page.ini"
ReserveFile          ".\resource\opt3page.ini"	
ReserveFile          ".\resource\classic256.bmp"
ReserveFile          ".\resource\modern256.bmp"
ReserveFile          "${NSISDIR}\Plugins\InstallOptions.dll"
!ifdef LANGUAGE_SELECT_SUPPORT
ReserveFile          "${NSISDIR}\Plugins\LangDLL.dll"
!endif
	
!include             "MUI.nsh"
!include             "Sections.nsh"
!define              LOGICLIB_SECTIONCMP
!include             "LogicLib.nsh"
;----------------------------------包含多语言
!include             "Language.nsi"

;----------------------------------页面界面设置
	!define MUI_ICON ".\resource\inst.ico"
	!define MUI_UNICON ".\resource\uninst.ico"
	!define MUI_HEADERIMAGE
	!define MUI_HEADERIMAGE_BITMAP ".\resource\modern-header.bmp"
	!define MUI_COMPONENTSPAGE_NODESC
	
;----------------------------------页面文本设置
	!define MUI_LICENSEPAGE_TEXT_TOP "$(MUI_LICENSEPAGE_TEXT_TOP)"
	!define MUI_COMPONENTSPAGE_TEXT_TOP "$(MUI_COMPONENTSPAGE_TEXT_TOP)"
	!define MUI_DIRECTORYPAGE_TEXT_TOP "$(MUI_DIRECTORYPAGE_TEXT_TOP)"
	!define MUI_ABORTWARNING

;----------------------------------插入页面
!ifdef LICENSE_PAGE_CHANGE_FONT
	!define MUI_PAGE_CUSTOMFUNCTION_SHOW LicensePage
!endif	
	!insertmacro MUI_PAGE_LICENSE ".\resource\License.txt"
	!define MUI_PAGE_CUSTOMFUNCTION_PRE ComponentPre
	!define MUI_PAGE_CUSTOMFUNCTION_SHOW ComponentShow
	!insertmacro MUI_PAGE_COMPONENTS
	!insertmacro MUI_PAGE_DIRECTORY
	!define MUI_PAGE_HEADER_TEXT "$(MUI_PAGE_ASSOCIATION_HEADER_TEXT)"
	!define MUI_PAGE_HEADER_SUBTEXT "$(MUI_PAGE_ASSOCIATION_HEADER_SUBTEXT)"
	!define MUI_PAGE_CUSTOMFUNCTION_PRE AsscoiationPre
	!define MUI_PAGE_CUSTOMFUNCTION_SHOW AsscoiationShow
	!insertmacro MUI_PAGE_COMPONENTS
	Page custom SetCustom2 LeaveCustom2
	Page custom SetCustom3 LeaveCustom3
	!insertmacro MUI_PAGE_INSTFILES

	!insertmacro MUI_UNPAGE_CONFIRM
	!insertmacro MUI_UNPAGE_INSTFILES
;----------------------------------插入语言
	!insertmacro MUI_LANGUAGE English
	!insertmacro MUI_LANGUAGE SimpChinese
	
!macro SelectIfSet SECTION1 SECTION2
	Push $0
	Push $1
		SectionGetFlags ${SECTION1} $0
		SectionGetFlags ${SECTION2} $1
		IntOp $0 $0 & ${SF_SELECTED}
		StrCmp $0 ${SF_SELECTED} +5 
		IntOp $1 $1 & ${SECTION_OFF}
		SectionSetFlags ${SECTION2} $1
		SectionSetText ${SECTION2} ""
		Goto +3
		IntOp $1 $1 | ${SF_SELECTED}
		SectionSetFlags ${SECTION2} $1
	Pop $1
	Pop $0
!macroend

!macro AssocIfSectionIsSelected EXT TYPE SECTION
	Push $0
		${If} ${SectionIsSelected} ${SECTION}
			ReadRegStr $0 HKCR ".${EXT}" ""
			${If} $0 != "Winamp.File"
			${AndIf} $0 != "Winamp.Playlist"
			${AndIf} $0 != "Winamp.SkinZip"
				WriteRegStr HKCR ".${EXT}" "" "${TYPE}"
				WriteRegStr HKCR ".${EXT}" "Winamp_Back" $0
			${EndIf}
		${EndIf}
	Pop $0
!macroend

!ifdef INSTALLER_FULL | INSTALLER_PRO	
InstType "$(INST_TYPE_FULL)"
InstType "$(INST_TYPE_STD)"
!endif
InstType "$(INST_TYPE_LITE)"
InstType "$(INST_TYPE_MIN)"

Section "主程序" main
	SectionIn 1 2 3 4 RO
	SetAutoClose         true
	
	ClearErrors ;检测,如果 Winamp 在运行则关闭
	Delete "$INSTDIR\Winamp.exe"
	${If} ${Errors}
		Push "Winamp v1.x" 
		Call CloseProgram
	${EndIf}
	
!ifdef LOG_SET_SUPPORT
	Delete "$INSTDIR\install.log"
	LogSet on
!endif

	SetOutPath $INSTDIR
	File ".\include\demo.mp3"
	File ".\include\whatsnew.txt"
	File ".\include\Winamp.exe"
	File ".\include\winamp.lks"
	File ".\include\Winamp.q1"
	File ".\include\winampmb.htm"
	
	;写入 winamp.m3u
	FileOpen $0 "$INSTDIR\winamp.m3u" w
	FileWrite $0 "#EXTM3U$\r$\n"
	FileWrite $0 "#EXTINF:5,demo$\r$\n"
	FileWrite $0 "demo.mp3$\r$\n"
	FileClose $0
	
	SetOutPath "$INSTDIR\Plugins"
	File ".\include\Plugins\out_wave.dll"
	File ".\include\Plugins\in_mp3.dll"
SectionEnd

Section "Winamp 代理" agent
	SectionIn 1 2 3
	Push "WinampAgentMain"
	Call CloseProgram
	StrCpy $0 "$INSTDIR\winampa.exe"
	ClearErrors
	Delete $0
	${If} ${Errors}
		GetTempFileName $1
		StrCpy $0 $1
	${EndIf}	
	File /oname=$0 ".\include\winampa.exe"
	${IfThen} $0 == $1 ${|} Rename /REBOOTOK $0 "$INSTDIR\winampa.exe" ${|}
	WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" WinampAgent "$INSTDIR\winampa.exe"
SectionEnd

!ifdef INSTALLER_FULL | INSTALLER_PRO
	
Section "Winamp 媒体库"
	SectionIn 1 2
	File ".\include\Plugins\gen_ml.dll"
SectionEnd

Section "现代外观" modern_skin
	SectionIn 1 2
	SetOutPath "$INSTDIR\Skins"
	File /r ".\include\Skins\Winamp Modern"
	SetOutPath "$INSTDIR\Plugins"
	File ".\include\Plugins\gen_ff.dll"
	File /r ".\include\Plugins\freeform"
SectionEnd

!endif

SubSection "界面扩展"
	Section "全局热键"
		SectionIn 1 2 3
		File ".\include\Plugins\gen_hotkeys.dll"
	SectionEnd

	Section "跳转到文件"
		SectionIn 1 2 3
		File ".\include\Plugins\gen_jumpex.dll"
	SectionEnd

	Section "托盘控制"
		SectionIn 1 2 3
		File ".\include\Plugins\gen_tray.dll"
	SectionEnd
SubSectionEnd

SubSection "音频文件"
!ifdef INSTALLER_FULL | INSTALLER_PRO	
	Section "Windows Media Audio (WMA)" wma
		SectionIn 1
		File ".\include\Plugins\in_wm.dll"
		File ".\include\Plugins\wmahelp.dll"
		
!ifdef LOG_SET_SUPPORT
	LogSet off
!endif
		;如果已安装则跳过
		ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32" "msacm.msaudio1"
		ReadRegStr $1 HKLM "System\CurrentControlSet\Control\MediaResources\ACM\msacm.msaudio1" "Driver"
		${If} $0 != "msaud32.acm"
		${AndIf} $1 != "msaud32.acm"
			File "/oname=$PLUGINSDIR\wmaudioredist.exe" ".\include\wmaudioredist.exe"
			ExecWait '"$PLUGINSDIR\wmaudioredist.exe" /Q /R:N'
		${EndIf}
!ifdef LOG_SET_SUPPORT
	LogSet on
!endif
	SectionEnd

	Section "MIDI" midi
		SectionIn 1 2
		File ".\include\Plugins\in_midi.dll"
		File ".\include\Plugins\read_file.dll"
	SectionEnd

	Section "MOD/XM/S3M/IT" mod
		SectionIn 1 2
		File ".\include\Plugins\in_mod.dll"
	SectionEnd

	Section "OGG Vorbis" ogg
		SectionIn 1 2
		File ".\include\Plugins\in_vorbis.dll"
	SectionEnd

	Section "AAC 编码"
		SectionIn 1 2
		File ".\include\Plugins\enc_aac.dll"
	SectionEnd

	Section "MP3 编码"
		SectionIn 1 2
		File ".\include\Plugins\enc_lame.dll"
		File ".\include\Plugins\lame_enc.dll"
	SectionEnd

	Section "MP4" mp4
		SectionIn 1 2
		File ".\include\Plugins\in_mp4.dll"
		File ".\include\Plugins\enc_mp4.dll"
		File ".\include\Plugins\libmp4v2.dll"
	SectionEnd
!endif

	Section "CD" cd
		SectionIn 1 2 3
		File ".\include\Plugins\in_cdda.dll"
	SectionEnd

!ifdef INSTALLER_FULL | INSTALLER_PRO	
	Section "Sonic Rip、烧录"
		SectionIn 1 2
		File "/oname=$INSTDIR\PXSDKPLS.dll" ".\include\PXSDKPLS.dll"
		
!ifdef LOG_SET_SUPPORT
	LogSet off
!endif
		;SetOutPath "$PLUGINSDIR"
		;File /r ".\include\Sonic Runtime\*.*"
		;unknown how to install the drivers
		SetOutPath "$INSTDIR\Plugins"
!ifdef LOG_SET_SUPPORT
	LogSet on
!endif
	SectionEnd

	Section "CDDB" cddb
		SectionIn 1 2
		File ".\include\Plugins\CDDBControlWinamp.dll"
		File ".\include\Plugins\CDDBUIWinamp.dll"
		File ".\include\Plugins\in_cdda.dll"
	SectionEnd
!endif ;end of INSTALLER_FULL | INSTALLER_PRO above

	Section "WAV/VOC/AU/AIFF" wav
		SectionIn 1 2 3
		File ".\include\Plugins\in_wave.dll"
	SectionEnd
SubSectionEnd

!ifdef INSTALLER_FULL | INSTALLER_PRO	
SubSection "视频文件" sub_video
	Section "Nullsoft 视频 (NSV)" nsv
		SectionIn 1 2
		File ".\include\Plugins\in_nsv.dll"
		File ".\include\Plugins\nsvdec_vp5.dll"
		File ".\include\Plugins\nsvdec_vp6.dll"
	SectionEnd

	Section "AVI/MPG/ASF" avi
		SectionIn 1 2
		File ".\include\Plugins\in_dshow.dll"
	SectionEnd
SubSectionEnd
!endif

SubSection "可视化"
	Section "Nullsoft 微型全屏"
		SectionIn 1 2 3
		File ".\include\Plugins\vis_nsfs.dll"
	SectionEnd

!ifdef INSTALLER_FULL | INSTALLER_PRO	
	Section "高级可视化"
		SectionIn 1 2
		File ".\include\Plugins\vis_avs.dll"
		File /r ".\include\Plugins\avs"
	SectionEnd

	Section "Milkdrop"
		SectionIn 1 2
		File ".\include\Plugins\vms_desktop.dll"
		File ".\include\Plugins\milkdrop.html"
		File ".\include\Plugins\vis_milk.dll"
		File /r ".\include\Plugins\Milkdrop"
	SectionEnd
!endif
SubSectionEnd

SubSection "特别的音频输出、效果支持"
!ifdef INSTALLER_FULL | INSTALLER_PRO	
	Section "信号处理器工作室插件"
		SectionIn 1 2 3
		File ".\include\Plugins\dsp_sps.dll"
		File /r ".\include\Plugins\DSP_SPS"
	SectionEnd

	Section "写入 WAV 文件支持"
		SectionIn 1 2
		File ".\include\Plugins\out_disk.dll"
	SectionEnd
!endif

	Section "DirectSound 输出支持"
		SectionIn 1 2 3
		File ".\include\Plugins\out_ds.dll"
	SectionEnd
SubSectionEnd

Section "" compon
SectionEnd	

Section "" icon
SectionEnd	

Section "开始菜单组"
	SectionIn 1 2 3 4
	SetOutPath "$SMPROGRAMS\Winamp"
	CreateShortCut "$SMPROGRAMS\Winamp\Winamp.lnk" "$INSTDIR\Winamp.exe"
	CreateShortCut "$SMPROGRAMS\Winamp\What's New.lnk" "$INSTDIR\whatsnew.txt"
	CreateShortCut "$SMPROGRAMS\Winamp\$(START_MENU_UNINST).lnk" "$INSTDIR\UninstWA.exe"
SectionEnd	

Section "桌面图标"
	SectionIn 1 2 3 4
	SetOutPath $DESKTOP
	CreateShortCut "$DESKTOP\Winamp.lnk" "$INSTDIR\Winamp.exe"
SectionEnd	

Section "快速启动栏"
	SectionIn 1 2 3 4
	SetOutPath $QUICKLAUNCH
	CreateShortCut "$QUICKLAUNCH\Winamp.lnk" "$INSTDIR\Winamp.exe"
SectionEnd	

Section
!ifdef LOG_SET_SUPPORT
	LogSet off
!endif
SectionEnd	

Section "系统托盘图标/代理" run_agent
	SectionIn 1 2 3 4
	Exec "$INSTDIR\winampa.exe"
SectionEnd	

Section "关联音频文件"
	SectionIn 1 2 3 4
	DetailPrint "$(REGISTRYING)"
	!insertmacro AssocIfSectionIsSelected mp3 "Winamp.File" ${main}
	!insertmacro AssocIfSectionIsSelected mp2 "Winamp.File" ${main}
	!insertmacro AssocIfSectionIsSelected mp1 "Winamp.File" ${main}
	!insertmacro AssocIfSectionIsSelected aac "Winamp.File" ${main}
	!insertmacro AssocIfSectionIsSelected apl "Winamp.File" ${main}
	!insertmacro AssocIfSectionIsSelected aif "Winamp.File" ${wav}
	!insertmacro AssocIfSectionIsSelected aiff "Winamp.File" ${wav}
	!insertmacro AssocIfSectionIsSelected au "Winamp.File" ${wav}
	!insertmacro AssocIfSectionIsSelected snd "Winamp.File" ${wav}
	!insertmacro AssocIfSectionIsSelected voc "Winamp.File" ${wav}
	!insertmacro AssocIfSectionIsSelected wav "Winamp.File" ${wav}
!ifdef INSTALLER_FULL | INSTALLER_PRO	
	!insertmacro AssocIfSectionIsSelected NSA "Winamp.File" ${nsv}
	!insertmacro AssocIfSectionIsSelected wma "Winamp.File" ${wma}
	!insertmacro AssocIfSectionIsSelected mid "Winamp.File" ${midi}
	!insertmacro AssocIfSectionIsSelected midi "Winamp.File" ${midi}
	!insertmacro AssocIfSectionIsSelected rmi "Winamp.File" ${midi}
	!insertmacro AssocIfSectionIsSelected KAR "Winamp.File" ${midi}
	!insertmacro AssocIfSectionIsSelected miz "Winamp.File" ${midi}
	!insertmacro AssocIfSectionIsSelected it "Winamp.File" ${mod}
	!insertmacro AssocIfSectionIsSelected itz "Winamp.File" ${mod}
	!insertmacro AssocIfSectionIsSelected mdz "Winamp.File" ${mod}
	!insertmacro AssocIfSectionIsSelected mod "Winamp.File" ${mod}
	!insertmacro AssocIfSectionIsSelected mtm "Winamp.File" ${mod}
	!insertmacro AssocIfSectionIsSelected m3m "Winamp.File" ${mod}
	!insertmacro AssocIfSectionIsSelected s3z "Winamp.File" ${mod}
	!insertmacro AssocIfSectionIsSelected stm "Winamp.File" ${mod}
	!insertmacro AssocIfSectionIsSelected xm "Winamp.File" ${mod}
	!insertmacro AssocIfSectionIsSelected xmz "Winamp.File" ${mod}
	!insertmacro AssocIfSectionIsSelected 669 "Winamp.File" ${mod}
	!insertmacro AssocIfSectionIsSelected amf "Winamp.File" ${mod}
	!insertmacro AssocIfSectionIsSelected far "Winamp.File" ${mod}
	!insertmacro AssocIfSectionIsSelected nst "Winamp.File" ${mod}
	!insertmacro AssocIfSectionIsSelected okt "Winamp.File" ${mod}
	!insertmacro AssocIfSectionIsSelected ptm "Winamp.File" ${mod}
	!insertmacro AssocIfSectionIsSelected stz "Winamp.File" ${mod}
	!insertmacro AssocIfSectionIsSelected ult "Winamp.File" ${mod}
	!insertmacro AssocIfSectionIsSelected ogg "Winamp.File" ${ogg}
	${IfThen} ${SectionIsSelected} ${ogg} ${|} WriteRegDWORD HKCU "Software\Winamp\in_vorbis" version 0x10204 ${|}
	!insertmacro AssocIfSectionIsSelected m4a "Winamp.File" ${mp4}
	!insertmacro AssocIfSectionIsSelected mp4 "Winamp.File" ${mp4}
	!insertmacro AssocIfSectionIsSelected cda "Winamp.File" ${cddb}
!endif	
SectionEnd	

!ifdef INSTALLER_FULL | INSTALLER_PRO	
Section "关联视频文件" assoc_video
	SectionIn 1 2 3 4
	DetailPrint "$(REGISTRYING)"
	!insertmacro AssocIfSectionIsSelected NSV "Winamp.File" ${nsv}
	!insertmacro AssocIfSectionIsSelected avi "Winamp.File" ${avi}
	!insertmacro AssocIfSectionIsSelected asf "Winamp.File" ${avi}
	!insertmacro AssocIfSectionIsSelected m2v "Winamp.File" ${avi}
	!insertmacro AssocIfSectionIsSelected mpeg "Winamp.File" ${avi}
	!insertmacro AssocIfSectionIsSelected mpg "Winamp.File" ${avi}
	!insertmacro AssocIfSectionIsSelected wmv "Winamp.File" ${avi}
SectionEnd	
!endif

Section "关联音频 CD" assoc_cd
	SectionIn 1 2 3 4
	DetailPrint "$(REGISTRYING)"
	ReadRegStr $0 HKCR "AudioCD\shell\play\command" ""
	StrCpy $1 $0 "" 14
	StrCmp $1 'Winamp.exe" %1' +3
	WriteRegStr HKCR "AudioCD\shell\play\command" "Winamp_Back" $0
	WriteRegStr HKCR "AudioCD\shell\play\command" "" '"$INSTDIR\Winamp.exe" %1'
SectionEnd	

Section "关联播放列表文件 (*.m3u,*.pls)" pls
	SectionIn 1 2 3 4
	!insertmacro AssocIfSectionIsSelected m3u "Winamp.Playlist" ${main}
	!insertmacro AssocIfSectionIsSelected pls "Winamp.Playlist" ${main}
SectionEnd	

Section "" end
	!insertmacro AssocIfSectionIsSelected wsz "Winamp.SkinZip" ${main}
	!insertmacro AssocIfSectionIsSelected wal "Winamp.SkinZip" ${main}
	
	WriteRegStr HKCU "Software\Winamp" "" "$INSTDIR"
	WriteRegStr HKCR "Winamp.File" "" "$(REG_MEDIA_FILE)"
	WriteRegStr HKCR "Winamp.File\DefaultIcon" "" "$INSTDIR\Winamp.exe,1"
	WriteRegStr HKCR "Winamp.File\shell" "" "Play"
	WriteRegStr HKCR "Winamp.File\shell\Play" "" "$(REG_PLAY)"
	WriteRegStr HKCR "Winamp.File\shell\Play\command" "" "$\"$INSTDIR\Winamp.exe$\" $\"%1$\""
	WriteRegStr HKCR "Winamp.File\shell\open" "" ""
	WriteRegStr HKCR "Winamp.File\shell\open\command" "" "$\"$INSTDIR\Winamp.exe$\" $\"%1$\""
	WriteRegStr HKCR "Winamp.File\shell\Enqueue" "" "$(REG_ENQUEUE)"
	WriteRegStr HKCR "Winamp.File\shell\Enqueue\command" "" "$\"$INSTDIR\Winamp.exe$\" /ADD $\"%1$\""
	WriteRegStr HKCR "Winamp.File\shell\ListBookmark" "" "$(REG_ADD_BOOKMARK)"
	WriteRegStr HKCR "Winamp.File\shell\ListBookmark\command" "" "$\"$INSTDIR\Winamp.exe$\" /BOOKMARK $\"%1$\""
	WriteRegStr HKCR "Winamp.Playlist" "" "$(REG_PLAYLIST_FILE)"
	WriteRegBin HKCR "Winamp.Playlist" "EditFlags" 00000100
	WriteRegStr HKCR "Winamp.Playlist\DefaultIcon" "" "$INSTDIR\Winamp.exe,1"
	WriteRegStr HKCR "Winamp.Playlist\shell" "" "Play"
	WriteRegStr HKCR "Winamp.Playlist\shell\Play" "" "$(REG_PLAY)"
	WriteRegStr HKCR "Winamp.Playlist\shell\Play\command" "" "$\"$INSTDIR\Winamp.exe$\" $\"%1$\""
	WriteRegStr HKCR "Winamp.Playlist\shell\open" "" ""
	WriteRegStr HKCR "Winamp.Playlist\shell\open\command" "" "$\"$INSTDIR\Winamp.exe$\" $\"%1$\""
	WriteRegStr HKCR "Winamp.Playlist\shell\Enqueue" "" "$(REG_ENQUEUE)"
	WriteRegStr HKCR "Winamp.Playlist\shell\Enqueue\command" "" "$\"$INSTDIR\Winamp.exe$\" /ADD $\"%1$\""
	WriteRegStr HKCR "Winamp.Playlist\shell\ListBookmark" "" "$(REG_ADD_BOOKMARK)"
	WriteRegStr HKCR "Winamp.Playlist\shell\ListBookmark\command" "" "$\"$INSTDIR\Winamp.exe$\" /BOOKMARK $\"%1$\""
	WriteRegStr HKCR "Winamp.SkinZip" "" "$(REG_EXT_INST_FILE)"
	WriteRegBin HKCR "Winamp.SkinZip" "EditFlags" 00000100
	WriteRegStr HKCR "Winamp.SkinZip\DefaultIcon" "" "$INSTDIR\Winamp.exe,1"
	WriteRegStr HKCR "Winamp.SkinZip\shell" "" "Install"
	WriteRegStr HKCR "Winamp.SkinZip\shell\install" "" ""
	WriteRegStr HKCR "Winamp.SkinZip\shell\install\command" "" "$\"$INSTDIR\Winamp.exe$\" $\"%1$\""
	WriteRegStr HKCR "Directory\shell\Winamp.Play" "" "$(REG_PLAY)"
	WriteRegStr HKCR "Directory\shell\Winamp.Play\command" "" "$\"$INSTDIR\Winamp.exe$\" $\"%1$\""
	WriteRegStr HKCR "Directory\shell\Winamp.Enqueue" "" "$(REG_ENQUEUE)"
	WriteRegStr HKCR "Directory\shell\Winamp.Enqueue\command" "" "$\"$INSTDIR\Winamp.exe$\" /ADD $\"%1$\""
	WriteRegStr HKCR "Directory\shell\Winamp.Bookmark" "" "$(REG_ADD_BOOKMARK)"
	WriteRegStr HKCR "Directory\shell\Winamp.Bookmark\command" "" "$\"$INSTDIR\Winamp.exe$\" /BOOKMARK $\"%1$\""
	
	StrCmp $INTERNET "" +2
	WriteINIStr "$INSTDIR\Winamp.ini" Winamp inet_mode $INTERNET
	
	ReadINIStr $0 "$PLUGINSDIR\opt2page.ini" "Field 7" State
	StrCmp $0 "" +3
	StrCmp $0 "$(MUI_PAGE_OPTION2_FIELD7_STATE)" +2
	WriteINIStr "$INSTDIR\Winamp.ini" Winamp langpack "$0.lng"
		
	ReadINIStr $0 "$PLUGINSDIR\opt2page.ini" "Field 3" State
	StrCmp $0 "" +2
	WriteINIStr "$INSTDIR\Winamp.ini" Winamp Proxy $0
	
	ReadINIStr $0 "$PLUGINSDIR\opt2page.ini" "Field 5" State
	StrCmp $0 "" +2
	WriteINIStr "$INSTDIR\Winamp.ini" Winamp proxyonly80 $0
	
	ReadINIStr $0 "$PLUGINSDIR\opt3page.ini" "Field 2" State ;经典界面
	ReadINIStr $1 "$PLUGINSDIR\opt3page.ini" "Field 3" State ;Modern 界面
	ReadINIStr $2 "$PLUGINSDIR\opt3page.ini" "Field 4" State ;其他界面
	${If} $0 == "1"
		WriteINIStr "$INSTDIR\Winamp.ini" winamp skin ""
	${ElseIf} $1 == "1"
		WriteINIStr "$INSTDIR\Winamp.ini" winamp skin "Winamp Modern"
	${ElseIf} $2 == "1"
		ReadINIStr $0 "$PLUGINSDIR\opt3page.ini" "Field 5" State ;其他界面
		${If} ${FileExists} "$INSTDIR\Skins\$0.wsz"
			WriteINIStr "$INSTDIR\Winamp.ini" winamp skin "$0.wsz"
		${ElseIf} ${FileExists} "$INSTDIR\Skins\$0.wal"
			WriteINIStr "$INSTDIR\Winamp.ini" winamp skin "$0.wal"
		${EndIf}
	${EndIf}
		
	WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Winamp" "DisplayName" "$(UNINST_DISPLAY_NAME)"
	WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Winamp" "UninstallString" "$\"$INSTDIR\UninstWA.exe$\""
	WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Winamp" "Installer Language" "$LANGUAGE"
	WriteUninstaller "$INSTDIR\UninstWA.exe"
	
  System::Call 'shell32.dll::SHChangeNotify(l, l, i, i) v (0x08000000, 0, 0, 0)'
	
	${If} ${RebootFlag}
		MessageBox MB_YESNO "$(MB_REBOOT_REQUIRED)" IDNO +2
		Reboot
	${Else}
		Exec '"$INSTDIR\Winamp.exe" /NEW "$INSTDIR\Winamp.m3u"'
	${EndIf}
SectionEnd	

Function .onInit
  InitPluginsDir
	
!ifdef LANGUAGE_SELECT_SUPPORT
	!insertmacro MUI_LANGDLL_DISPLAY
!endif

	find_winamp:
	FindWindow $0 "Winamp v1.x"
	IntCmp $0 0 find_winamp_end
	StrCmp $LANGUAGE ${ENG} 0 +3
	MessageBox MB_ABORTRETRYIGNORE "You must close Winamp before you can continue.$\r$\n$\r$\n$\tAfter you have closed Winamp, select Retry.$\r$\n$\r$\n$\tIf you wish to try to install anyway, select Ignore.$\r$\n$\r$\n$\tIf you wish to abort the installation, select Abort." IDRETRY find_winamp IDIGNORE find_winamp_end
	Goto quit
	StrCmp $LANGUAGE ${CHS} 0 +3
	MessageBox MB_ABORTRETRYIGNORE "在你继续之前你必须先关闭 Winamp。$\r$\n$\r$\n$\t在你关闭 Winamp 后,选择重试。$\r$\n$\r$\n$\t如果你希望在别的地方安装,选择忽略。$\r$\n$\r$\n$\t如果你想退出安装,选择终止。" IDRETRY find_winamp IDIGNORE find_winamp_end
	Goto quit
	quit:
	Quit
	find_winamp_end:
	
	File "/oname=$PLUGINSDIR\gaydata.ini" ".\resource\${GAYDATA}"
	File "/oname=$PLUGINSDIR\opt2page.ini" ".\resource\opt2page.ini"
	File "/oname=$PLUGINSDIR\opt3page.ini" ".\resource\opt3page.ini"	
	File "/oname=$PLUGINSDIR\classic256.bmp" ".\resource\classic256.bmp"
	File "/oname=$PLUGINSDIR\modern256.bmp" ".\resource\modern256.bmp"
FunctionEnd

Function ComponentPre
	Push $0
		Call ResetSectionText
		;隐藏 Asscoiations
		${For} $0 ${icon} ${end}
			SectionSetText $0 ""
		${Next}
	Pop $0
FunctionEnd

Function ComponentShow
	Push $0
	Push $1
		${For} $1 ${main} ${compon}
			ReadINIStr $0 "$PLUGINSDIR\gaydata.ini" "$(MUI_COMPONENTSPAGE_SECTION_NAME)" "sec$1"
			SectionSetText $1 $0
		${Next}
	Pop $1
	Pop $0
FunctionEnd

Function AsscoiationPre
	Push $0
	
	Call ResetSectionText
	;隐藏 Components
	${For} $0 ${main} ${compon}
		SectionSetText $0 ""
	${Next}	
	
	;检测依存关系
!ifdef INSTALLER_FULL | INSTALLER_PRO
	${If} ${SectionIsSelected} ${nsv}
	${OrIf} ${SectionIsSelected} ${avi} 
		!insertmacro SelectSection ${assoc_video}
	${Else}
		!insertmacro UnselectSection ${assoc_video}
		SectionSetText ${assoc_video} ""
	${EndIf}
!endif
	!insertmacro SelectIfSet ${agent} ${run_agent}
	!insertmacro SelectIfSet ${cd} ${assoc_cd}
	
	Pop $0
FunctionEnd

Function AsscoiationShow
	Push $0
	Push $1
	
	FindWindow $0 "#32770" "" $HWNDPARENT
  GetDlgItem $1 $0 1017
	ShowWindow $1 ${SW_HIDE}
  GetDlgItem $1 $0 1021
	ShowWindow $1 ${SW_HIDE}
  GetDlgItem $1 $0 1023
	ShowWindow $1 ${SW_HIDE}
  GetDlgItem $1 $0 1006
	SendMessage $1 ${WM_SETTEXT} 0 "STR:$(MUI_PAGE_ASSOCIATION_TEXT_TOP)"
  GetDlgItem $1 $0 1022
	SendMessage $1 ${WM_SETTEXT} 0 "STR:$(MUI_PAGE_ASSOCIATION_TEXT_COMPLIST)"
	
	${For} $1 ${icon} ${end}
		ReadINIStr $0 "$PLUGINSDIR\gaydata.ini" "$(MUI_COMPONENTSPAGE_SECTION_NAME)" "sec$1"
		SectionSetText $1 $0
	${Next}
	
	Pop $1
	Pop $0
FunctionEnd

Function ResetSectionText
	Push $R0
	Push $R1
		${For} $R1 ${main} ${end}
			ReadINIStr $R0 "$PLUGINSDIR\gaydata.ini" "$(MUI_COMPONENTSPAGE_SECTION_NAME)" "sec$R1"
			${If} $R0 == ""
				SectionSetText $R1 ""
			${Else}
				SectionSetText $R1 " "
			${EndIf}
		${Next}
	Pop $R1
	Pop $R0
FunctionEnd

Function SetCustom2
	WriteINIStr "$PLUGINSDIR\opt2page.ini" "Field 1" Text "$(MUI_PAGE_OPTION2_FIELD1_TEXT)"
	WriteINIStr "$PLUGINSDIR\opt2page.ini" "Field 2" ListItems "$(MUI_PAGE_OPTION2_FIELD2_LISTITEMS)"
	WriteINIStr "$PLUGINSDIR\opt2page.ini" "Field 4" Text "$(MUI_PAGE_OPTION2_FIELD4_TEXT)"
	WriteINIStr "$PLUGINSDIR\opt2page.ini" "Field 5" Text "$(MUI_PAGE_OPTION2_FIELD5_TEXT)"
	WriteINIStr "$PLUGINSDIR\opt2page.ini" "Field 6" Text "$(MUI_PAGE_OPTION2_FIELD6_TEXT)"
	WriteINIStr "$PLUGINSDIR\opt2page.ini" "Field 7" ListItems "$(MUI_PAGE_OPTION2_FIELD7_LISTITEMS)"
	
	WriteINIStr "$PLUGINSDIR\opt2page.ini" "Field 2" State "$(MUI_PAGE_OPTION2_FIELD2_STATE)"
	WriteINIStr "$PLUGINSDIR\opt2page.ini" "Field 7" State "$(MUI_PAGE_OPTION2_FIELD7_STATE)"
	
	ReadINIStr $0 "$INSTDIR\Winamp.ini" Winamp Proxy
	StrCmp $0 "" +2
	WriteINIStr "$PLUGINSDIR\opt2page.ini" "Field 3" State $0
	
	ReadINIStr $0 "$INSTDIR\Winamp.ini" Winamp proxyonly80
	StrCmp $0 "" +2
	WriteINIStr "$PLUGINSDIR\opt2page.ini" "Field 5" State $0
	
	Push $INSTDIR
	Call SearchLanguages
	
  InstallOptions::initDialog /NOUNLOAD "$PLUGINSDIR\opt2page.ini"
	Pop $HWND
  !insertmacro MUI_HEADER_TEXT "$(MUI_PAGE_OPTION2_HEADER_TEXT)" "$(MUI_PAGE_OPTION2_HEADER_SUBTEXT)"
	
	ReadINIStr $0 "$INSTDIR\Winamp.ini" Winamp inet_mode
	StrCmp $0 "" +3
	GetDlgItem $1 $HWND 1201
	SendMessage $1 0x014E $0 0
	
 	InstallOptions::show
FunctionEnd

Function LeaveCustom2
	GetDlgItem $0 $HWND 1201
	SendMessage $0 0x0147 0 0 $INTERNET
FunctionEnd

Function SetCustom3
	WriteINIStr "$PLUGINSDIR\opt3page.ini" "Field 1" Text "$(MUI_PAGE_OPTION3_FIELD1_TEXT)"
	WriteINIStr "$PLUGINSDIR\opt3page.ini" "Field 2" Text "$(MUI_PAGE_OPTION3_FIELD2_TEXT)"
	WriteINIStr "$PLUGINSDIR\opt3page.ini" "Field 3" Text "$(MUI_PAGE_OPTION3_FIELD3_TEXT)"
	WriteINIStr "$PLUGINSDIR\opt3page.ini" "Field 4" Text "$(MUI_PAGE_OPTION3_FIELD4_TEXT)"
	WriteINIStr "$PLUGINSDIR\opt3page.ini" "Field 6" Text "$PLUGINSDIR\classic256.bmp"
	WriteINIStr "$PLUGINSDIR\opt3page.ini" "Field 7" Text "$PLUGINSDIR\modern256.bmp"
	WriteINIStr "$PLUGINSDIR\opt3page.ini" "Field 8" Text "$(MUI_PAGE_OPTION3_FIELD8_TEXT)"
	
!ifdef INSTALLER_FULL | INSTALLER_PRO	
	;检测是否安装了现代外观 Field 3 = modern_skin
	${If} ${SectionIsSelected} ${modern_skin}
		WriteINIStr $PLUGINSDIR\opt3page.ini "Field 3" State 1
		WriteINIStr $PLUGINSDIR\opt3page.ini "Field 3" Flags "NOTABSTOP|NOTIFY"
		WriteINIStr $PLUGINSDIR\opt3page.ini "Field 2" State ""
		WriteINIStr $PLUGINSDIR\opt3page.ini "Field 4" State ""
	${Else}
!endif	
		WriteINIStr $PLUGINSDIR\opt3page.ini "Field 3" State ""
		WriteINIStr $PLUGINSDIR\opt3page.ini "Field 3" Flags "NOTABSTOP|DISABLED|NOTIFY"
		WriteINIStr $PLUGINSDIR\opt3page.ini "Field 2" State 1
		WriteINIStr $PLUGINSDIR\opt3page.ini "Field 4" State ""
!ifdef INSTALLER_FULL | INSTALLER_PRO	
	${EndIf}
!endif	
	
	;查找安装目录下的其它外观
	Push "$INSTDIR\Skins"
	Call SearchSkins
	
  InstallOptions::initDialog /NOUNLOAD "$PLUGINSDIR\opt3page.ini"
	Pop $HWND
  !insertmacro MUI_HEADER_TEXT "$(MUI_PAGE_OPTION3_HEADER_TEXT)" "$(MUI_PAGE_OPTION3_HEADER_SUBTEXT)"
	
	GetDlgItem $0 $HWND 1204
	EnableWindow $0 0
	
	ReadINIStr $0 "$PLUGINSDIR\opt3page.ini" "Field 5" State
	StrCmp $0 "" 0 +3
	GetDlgItem $0 $HWND 1203
	EnableWindow $0 0
	
 	InstallOptions::show
FunctionEnd

Function LeaveCustom3
	ReadINIStr $0 "$PLUGINSDIR\opt3page.ini" Settings State
  ${Switch} $0
	${Default}
		Abort
	
  ${Case} 2
		GetDlgItem $1 $HWND 1204
		EnableWindow $1 0
		Abort
	
  ${Case} 3
		GetDlgItem $1 $HWND 1204
		EnableWindow $1 0
		Abort
	
  ${Case} 4
		GetDlgItem $1 $HWND 1204
		EnableWindow $1 1
		Abort
	
  ${Case} 0
	${EndSwitch}
FunctionEnd

!ifdef LICENSE_PAGE_CHANGE_FONT
Function LicensePage
	;更改许可页面的字体为 Tahoma 8
	FindWindow $0 "#32770" "" $HWNDPARENT
  GetDlgItem $0 $0 1000
	CreateFont $1 "Tahoma" "8" "" "" 
	SendMessage $0 ${WM_SETFONT} $1 0
FunctionEnd
!endif
	
Function SearchSkins
	Exch $R4
	Push $R0
	Push $R1
	Push $R2
	Push $R3
	
	WriteINIStr "$PLUGINSDIR\opt3page.ini" "Field 5" ListItems ""
  ClearErrors
  FindFirst $R0 $R1 "$R4\*"
  ${Unless} ${Errors}
    ${Do}
      ${Select} $R1
        ${Case2} "." ".."
          ; Do nothing
        ${CaseElse}
					${If} ${FileExists} "$R4\$R1\*"
						${If} $R1 != "Winamp Modern"
							ReadINIStr $R2 "$PLUGINSDIR\opt3page.ini" "Field 5" ListItems
							WriteINIStr "$PLUGINSDIR\opt3page.ini" "Field 5" ListItems "$R2|$R1"
							StrCmp $R3 "" 0 +2
							StrCpy $R3 $R1
						${EndIf}
					${Else}
						StrCpy $R2 $R1 "" -4
						${If} $R2 == ".wsz"
						${OrIf} $R2 == ".wal"
							ReadINIStr $R2 "$PLUGINSDIR\opt3page.ini" "Field 5" ListItems
							StrCpy $R2 "$R2|$R1" -4 ;不带扩展名
							WriteINIStr "$PLUGINSDIR\opt3page.ini" "Field 5" ListItems $R2
							StrCmp $R3 "" 0 +2
							StrCpy $R3 $R1 -4
						${EndIf}
					${EndIf}
          ;DetailPrint "Found $R4\$R1"
      ${EndSelect}
      FindNext $R0 $R1
    ${LoopUntil} ${Errors}
    FindClose $R0
  ${EndUnless}
	
	WriteINIStr "$PLUGINSDIR\opt3page.ini" "Field 5" State $R3
	
	Pop $R3
	Pop $R2
	Pop $R1
	Pop $R0
	Pop $R4
FunctionEnd	
	
Function SearchLanguages
	Exch $R3
	Push $R0
	Push $R1
	Push $R2
	
  ClearErrors
  FindFirst $R0 $R1 "$R3\*"
  ${Unless} ${Errors}
    ${Do}
      ${Select} $R1
        ${Case2} "." ".."
          ; Do nothing
        ${CaseElse}
					${If} ${FileExists} "$R3\$R1\*"
					${Else}
						StrCpy $R2 $R1 "" -4
						${If} $R2 == ".lng"
							ReadINIStr $R2 "$PLUGINSDIR\opt2page.ini" "Field 7" ListItems
							StrCpy $R2 "$R2|$R1" -4
							WriteINIStr "$PLUGINSDIR\opt2page.ini" "Field 7" ListItems $R2
						${EndIf}
					${EndIf}
      ${EndSelect}
      FindNext $R0 $R1
    ${LoopUntil} ${Errors}
    FindClose $R0
  ${EndUnless}
	
	ReadINIStr $R0 "$INSTDIR\Winamp.ini" Winamp langpack
	${If} $R0 != ""
			${If} ${FileExists} "$INSTDIR\$R0"
				StrCpy $R0 $R0 -4
				WriteINIStr "$PLUGINSDIR\opt2page.ini" "Field 7" State $R0
			${EndIf}	
	${EndIf}
	
	Pop $R2
	Pop $R1
	Pop $R0
	Pop $R3
FunctionEnd	

Function CloseProgram 
	Exch $R0 ;首先要 !include LogicLib.nsh
	Push $R1
	Push $R2
	${Do}
		FindWindow $R2 $R0
		${If} $R2 = 0
			${ExitDo}
		${Else}
			SendMessage $R2 ${WM_CLOSE} 0 0
			;SendMessage $R2 ${WM_DESTROY} 0 0
		${EndIf}
		Sleep 200
		${If} $R1 > 10
			${ExitDo}
		${EndIf}
		IntOp $R1 $R1 + 1
	${Loop}
	Pop $R2
	Pop $R1 
	Pop $R0
FunctionEnd

;--------------------------------------------
; 卸载段
;--------------------------------------------

Section Uninstall
	ExecWait '"$INSTDIR\Winamp.exe" /UNREG'
	Call un.Restore
	DeleteRegKey HKCR "Winamp.File"
	DeleteRegKey HKCR "Winamp.Playlist"
	DeleteRegKey HKCR "Winamp.SkinZip"
	DeleteRegKey HKCR "Directory\shell\Winamp.Play"
	DeleteRegKey HKCR "Directory\shell\Winamp.Enqueue"
	DeleteRegKey HKCR "Directory\shell\Winamp.Bookmark"
	DeleteRegKey HKCU "Software\Winamp"
	DeleteRegKey HKLM "SOFTWARE\Nullsoft\Winamp"
	DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Winamp"
	
	Push "WinampAgentMain"
	Call un.CloseProgram

	;必删除的文件或使用过程中产生的文件
	Delete /REBOOTOK "$INSTDIR\Winamp.m3u"
	Delete /REBOOTOK "$INSTDIR\Winamp.ini"
	Delete /REBOOTOK "$INSTDIR\UninstWA.exe"
	Delete /REBOOTOK "$INSTDIR\Plugins\vis_avs.dat"
	Delete /REBOOTOK "$INSTDIR\studio.xnf"
	Delete /REBOOTOK "$INSTDIR\Plugins\gen_ml.ini"
	RMDir /r "$INSTDIR\Plugins\ml"
	
!ifdef LOG_SET_SUPPORT
	Push "$INSTDIR\install.log"
	Call un.DelFileByLog
	Push "$INSTDIR\install.log"
	Call un.RMDirByLog
	Delete "$INSTDIR\install.log"
!else	
	;桌面图标
	Delete /REBOOTOK "$DESKTOP\Winamp.lnk"
	
	;快速启动栏图标
	Delete /REBOOTOK "$QUICKLAUNCH\Winamp.lnk"
	
	;开始菜单组
	RMDir /r "$SMPROGRAMS\Winamp"
	
	;主程序文件
	Delete /REBOOTOK "$INSTDIR\whatsnew.txt"
	Delete /REBOOTOK "$INSTDIR\demo.mp3"
	Delete /REBOOTOK "$INSTDIR\winamp.exe"
	Delete /REBOOTOK "$INSTDIR\winamp.lks"
	Delete /REBOOTOK "$INSTDIR\Winamp.q1"
	Delete /REBOOTOK "$INSTDIR\winampmb.htm"
	Delete /REBOOTOK "$INSTDIR\Plugins\out_wave.dll"
	Delete /REBOOTOK "$INSTDIR\Plugins\in_mp3.dll" 
	
	;Winamp 代理
	Delete /REBOOTOK "$INSTDIR\winampa.exe"
	
	;媒体库
	Delete /REBOOTOK "$INSTDIR\Plugins\gen_ml.dll"
	
	;现代外观文件
	RMDir /r "$INSTDIR\Skins\Winamp Modern"
	Delete /REBOOTOK "$INSTDIR\Plugins\gen_ff.dll"
	RMDir /r "$INSTDIR\Plugins\freeform"
	
	;全局热键
	Delete /REBOOTOK "$INSTDIR\Plugins\gen_hotkeys.dll"
	
	;跳转到文件
	Delete /REBOOTOK "$INSTDIR\Plugins\gen_jumpex.dll"

	;托盘控制
	Delete /REBOOTOK "$INSTDIR\Plugins\gen_tray.dll"

	;Windows Media Audio (WMA)
	Delete /REBOOTOK "$INSTDIR\Plugins\in_wm.dll"
	Delete /REBOOTOK "$INSTDIR\Plugins\wmahelp.dll"
		
	;MIDI
	Delete /REBOOTOK "$INSTDIR\Plugins\in_midi.dll"
	Delete /REBOOTOK "$INSTDIR\Plugins\read_file.dll"

	;MOD/XM/S3M/IT
	Delete /REBOOTOK "$INSTDIR\Plugins\in_mod.dll"

	;OGG Vorbis
	Delete /REBOOTOK "$INSTDIR\Plugins\in_vorbis.dll"

	;AAC 编码
	Delete /REBOOTOK "$INSTDIR\Plugins\enc_aac.dll"

	;MP3 编码
	Delete /REBOOTOK "$INSTDIR\Plugins\enc_lame.dll"
	Delete /REBOOTOK "$INSTDIRe\Plugins\lame_enc.dll"

	;MP4
	Delete /REBOOTOK "$INSTDIR\Plugins\in_mp4.dll"
	Delete /REBOOTOK "$INSTDIR\Plugins\enc_mp4.dll"
	Delete /REBOOTOK "$INSTDIR\Plugins\libmp4v2.dll"

	;CD
	Delete /REBOOTOK "$INSTDIR\Plugins\in_cdda.dll"

	;Sonic Rip、烧录
	Delete /REBOOTOK "$INSTDIR\PXSDKPLS.dll"
		
	;CDDB
	Delete /REBOOTOK "$INSTDIR\Plugins\CDDBControlWinamp.dll"
	Delete /REBOOTOK "$INSTDIR\Plugins\CDDBUIWinamp.dll"
	Delete /REBOOTOK "$INSTDIR\Plugins\in_cdda.dll"
		
	;WAV/VOC/AU/AIFF
	Delete /REBOOTOK "$INSTDIR\Plugins\in_wave.dll"
		
	;Nullsoft 视频 (NSV)
	Delete /REBOOTOK "$INSTDIR\Plugins\in_nsv.dll"
	Delete /REBOOTOK "$INSTDIR\Plugins\nsvdec_vp5.dll"
	Delete /REBOOTOK "$INSTDIR\Plugins\nsvdec_vp6.dll"

	;AVI/MPG/ASF
	Delete /REBOOTOK "$INSTDIR\Plugins\in_dshow.dll"
		
	;Nullsoft 微型全屏
	Delete /REBOOTOK "$INSTDIR\Plugins\vis_nsfs.dll"

	;高级可视化
	Delete /REBOOTOK "$INSTDIR\Plugins\vis_avs.dll"
	RMDir /r "$INSTDIR\Plugins\avs"
		
	;Milkdrop
	Delete /REBOOTOK "$INSTDIR\Plugins\vms_desktop.dll"
	Delete /REBOOTOK "$INSTDIR\Plugins\milkdrop.html"
	Delete /REBOOTOK "$INSTDIR\Plugins\vis_milk.dll"
	RMDir /r "$INSTDIR\Plugins\Milkdrop"
		
	;信号处理器工作室插件
	Delete /REBOOTOK "$INSTDIR\Plugins\dsp_sps.dll"
	RMDir /r "$INSTDIR\Plugins\DSP_SPS"
		
	;写入 WAV 文件支持
	Delete /REBOOTOK "$INSTDIR\Plugins\out_disk.dll"

	;DirectSound 输出支持
	Delete /REBOOTOK "$INSTDIR\Plugins\out_ds.dll"
!endif	;end of LOG_SET_SUPPORT
	
	;如果目录为空则删除
	RMDir "$INSTDIR\Plugins"
	RMDir "$INSTDIR\Skins"
	RMDir "$INSTDIR"
	
	System::Call 'shell32.dll::SHChangeNotify(l, l, i, i) v (0x08000000, 0, 0, 0)'
	
	${If} ${FileExists} $INSTDIR
		MessageBox MB_OK|MB_ICONEXCLAMATION "$(MB_NOT_COMPLETE_REMOVE)"
		ExecShell open $INSTDIR "" SW_SHOWMAXIMIZED
	${EndIf}
	MessageBox MB_OK|MB_ICONEXCLAMATION "$(MB_UNINST_FINISH)"
SectionEnd	

Function un.onInit
	ReadRegStr $LANGUAGE HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Winamp" "Installer Language"
FunctionEnd

Function un.CloseProgram 
	Exch $R0 ;首先要 !include LogicLib.nsh
	Push $R1
	Push $R2
	${Do}
		FindWindow $R2 $R0
		${If} $R2 = 0
			${ExitDo}
		${Else}
			SendMessage $R2 ${WM_CLOSE} 0 0
			;SendMessage $R2 ${WM_DESTROY} 0 0
		${EndIf}
		Sleep 200
		${If} $R1 > 10
			${ExitDo}
		${EndIf}
		IntOp $R1 $R1 + 1
	${Loop}
	Pop $R2
	Pop $R1 
	Pop $R0
FunctionEnd

Function un.Restore
  Push $R0 ;首先要 !include LogicLib.nsh
  Push $R1
  Push $R2
		${Do}
			EnumRegKey $R0 HKLM "SOFTWARE\Classes" $R1
			StrCpy $R2 $R0 1
			${If} $R2 == "."
				Push $R0
				Call un.Restore.EnumRegValue
			${EndIf}
			IntOp $R1 $R1 + 1
		${LoopUntil} $R0 == ""
		
		StrCpy $R1 0
		StrCpy $R2 0
		${Do}
			EnumRegValue $R0 HKCR "Winamp.File\temp" $R1
			${If} $R0 == ""
				IntOp $R2 $R2 + 1
			${Else}
				DeleteRegKey HKCR $R0
				DetailPrint "$(REMOVE_ASSOC) $R0"
			${EndIf}
			IntOp $R1 $R1 + 1
		${LoopUntil} $R2 > 2
		DeleteRegKey HKCR "Winamp.File\temp"
		
		StrCpy $R1 0
		StrCpy $R2 0
		${Do}
			EnumRegValue $R0 HKCU "Software\Netscape\Netscape Navigator\Viewers" $R1
			${If} $R0 == ""
				IntOp $R2 $R2 + 1
			${Else}
				StrCpy $R3 $R0 "" -10
				${IfThen} $R3 == "Winamp.exe" ${|} DeleteRegValue HKCU "Software\Netscape\Netscape Navigator\Viewers" $R0 ${|}
			${EndIf}
			IntOp $R1 $R1 + 1
		${LoopUntil} $R2 > 2
		
		ReadRegStr $R0 HKCR "AudioCD\shell\play\command" "Winamp_Back"
		${IfThen} $R0 != "" ${|} WriteRegStr HKCR "AudioCD\shell\play\command" "" $R0 ${|}
		DeleteRegValue HKCR "AudioCD\shell\play\command" "Winamp_Back"
  Pop $R2
  Pop $R1
  Pop $R0
FunctionEnd

Function un.Restore.EnumRegValue
	Exch $R0 ;首先要 !include LogicLib.nsh
	Push $R1
	Push $R2
	Push $R3
		StrCpy $R1 0
		${Do}
			EnumRegValue $R2 HKLM "SOFTWARE\Classes\$R0" $R1
			${IfThen} $R2 == "" ${|} IntOp $R3 $R3 + 1 ${|}
			
			${If} $R2 == "Winamp_Back"
					ReadRegStr $R2 HKCR "$R0" "Winamp_Back"
					WriteRegStr HKCR "$R0" "" "$R2"
					DeleteRegValue HKCR "$R0" "Winamp_Back"
					${If} $R2 == ""
						WriteRegStr HKCR "Winamp.File\temp" $R0 ""
					${Else}
						ReadRegStr $R2 HKCR "$R2" ""
						DetailPrint "$(RESTORE_ASSOC) $R0 -> $R2"
					${EndIf}
			${EndIf}
			IntOp $R1 $R1 + 1
		${LoopUntil} $R3 > 2
	Pop $R3
	Pop $R2
	Pop $R1
	Pop $R0
FunctionEnd

!ifdef LOG_SET_SUPPORT
Function un.DelFileByLog
	Exch $R0
	Push $R1
	Push $R2
	Push $R3
	
	FileOpen $R0 $R0 r
	${Do}
	  FileRead $R0 $R1
		StrCpy $R1 $R1 -2
		StrCpy $R2 $R1 11
		StrCpy $R3 $R1 20
		${If} $R2 == "File: wrote"
		${OrIf} $R2 == "File: skipp"
		${OrIf} $R3 == "CreateShortCut: out:"
		${OrIf} $R3 == "created uninstaller:"
			Push $R1
			Push '"'
			Call un.StrLoc
			Pop $R2
			${If} $R2 != ""
				IntOp $R2 $R2 + 1
				StrCpy $R3 $R1 "" $R2
				Push $R3
				Push '"'
				Call un.StrLoc
				Pop $R2
				${If} $R2 != ""
					StrCpy $R3 $R3 $R2
					Delete /REBOOTOK $R3
				${EndIf}
			${EndIf}
		${EndIf}
		StrCpy $R2 $R1 7
		${If} $R2 == "Rename:"
			Push $R1
			Push '->'
			Call un.StrLoc
			Pop $R2
			${If} $R2 != ""
				IntOp $R2 $R2 + 2
				StrCpy $R3 $R1 "" $R2
				Delete /REBOOTOK $R3
			${EndIf}
		${EndIf}
	${LoopUntil} $R1 == ""
	FileClose $R0
		
	Pop $R3
	Pop $R2
	Pop $R1
	Pop $R0
FunctionEnd

Function un.RMDirByLog
	Exch $R0
	Push $R1
	Push $R2
	Push $R3
	Push $R4
	
	FileOpen $R0 $R0 r
	FileSeek $R0 16 END $R1
	${Do}
		FileSeek $R0 -3 CUR $R1
		FileReadByte $R0 $R2
		FileReadByte $R0 $R3
		${If} "$R2$R3" == "1310"
			FileRead $R0 $R2
			FileSeek $R0 $R1
			StrCpy $R3 $R2 16
			${If} $R3 == "CreateDirectory:"
				Push $R2
				Push '"'
				Call un.StrLoc
				Pop $R3
				${If} $R3 != ""
					IntOp $R3 $R3 + 1
					StrCpy $R3 $R2 "" $R3
					Push $R3
					Push '"'
					Call un.StrLoc
					Pop $R2
					${If} $R2 != ""
						StrCpy $R2 $R3 $R2
						; ----------------------特殊目录则跳过
						${If} $R2 != $PLUGINSDIR
						${AndIf} $R2 != $PROGRAMFILES
						${AndIf} $R2 != $COMMONFILES
						${AndIf} $R2 != $DESKTOP
						${AndIf} $R2 != $STARTMENU
						${AndIf} $R2 != $SMPROGRAMS
						${AndIf} $R2 != $SMSTARTUP
						${AndIf} $R2 != $QUICKLAUNCH
						${AndIf} $R2 != $FAVORITES
							RMDir $R2 ;如果是空目录则删除
						${EndIf}
						; ----------------------
					${EndIf}
				${EndIf}
			${EndIf}
		${EndIf}
	${LoopUntil} $R1 < 10
	FileClose $R0
	
	Pop $R4
	Pop $R3
	Pop $R2
	Pop $R1
	Pop $R0
FunctionEnd

Function un.StrLoc
	Exch $R0 ;Str to search for
	Exch
	Exch $R1 ;string
	Push $R2 ;len of Str to search for
	Push $R3 ;len of string
	Push $R4
	Push $R5
		StrLen $R2 $R0
		StrLen $R3 $R1
		${Do}
			StrCpy $R5 $R1 $R2 $R4
			${If} $R5 == $R0
			${OrIf} $R4 = $R3
				${ExitDo}
			${EndIf}
			IntOp $R4 $R4 + 1
		${Loop}
		${If} $R4 = $R3
			StrCpy $R0 ""
		${Else}
			StrCpy $R0 $R4
		${EndIf}	
	Pop $R5
	Pop $R4
	Pop $R3
	Pop $R2
	Pop $R1
	Exch $R0
FunctionEnd	
!endif

引用Language.nsi的内容:

!define ENG 1033
!define CHS 2052
!define CHT 1028

LangString CAPTION ${ENG} "Winamp Setup"
LangString CAPTION ${CHS} "Winamp 安装"

LangString BRANDING_TEXT ${ENG} "Nullsoft Install System -- built on ${__DATE__} at ${__TIME__}"
LangString BRANDING_TEXT ${CHS} "Nullsoft Install System -- 创建于 ${__DATE__} 在 ${__TIME__}"

LangString MUI_LICENSEPAGE_TEXT_TOP ${ENG} "Please read and agree to the license terms below before installing."
LangString MUI_LICENSEPAGE_TEXT_TOP ${CHS} "请在安装前阅读并同意下面的许可条款"

LangString INST_TYPE_FULL ${ENG} "Full"
LangString INST_TYPE_FULL ${CHS} "完全"

LangString INST_TYPE_STD ${ENG} "Standard"
LangString INST_TYPE_STD ${CHS} "标准"

LangString INST_TYPE_LITE ${ENG} "Lite"
LangString INST_TYPE_LITE ${CHS} "精简"

LangString INST_TYPE_MIN ${ENG} "Minimal"
LangString INST_TYPE_MIN ${CHS} "最小"

!ifdef INSTALLER_FULL
	LangString MUI_COMPONENTSPAGE_TEXT_TOP ${ENG} "This will install Winamp ${VERSION}. This installer contains the full install."
	LangString MUI_COMPONENTSPAGE_TEXT_TOP ${CHS} "现在将安装 Winamp ${VERSION}。本安装程序为完全版"
!endif

!ifdef INSTALLER_PRO
	LangString MUI_COMPONENTSPAGE_TEXT_TOP ${ENG} "This will install Winamp ${VERSION}. This installer contains the pro install."
	LangString MUI_COMPONENTSPAGE_TEXT_TOP ${CHS} "现在将安装 Winamp ${VERSION}。本安装程序为专业版"
!endif

!ifdef INSTALLER_LITE
	LangString MUI_COMPONENTSPAGE_TEXT_TOP ${ENG} "This will install Winamp ${VERSION}. This installer contains the lite install."
	LangString MUI_COMPONENTSPAGE_TEXT_TOP ${CHS} "现在将安装 Winamp ${VERSION}。本安装程序为精简版"
!endif

LangString MUI_COMPONENTSPAGE_SECTION_NAME ${ENG} "secnames"
LangString MUI_COMPONENTSPAGE_SECTION_NAME ${CHS} "secnames_chs"

LangString MUI_DIRECTORYPAGE_TEXT_TOP ${ENG} "Setup has determined the optimal location to install. If you would like to change the folder, do so now."
LangString MUI_DIRECTORYPAGE_TEXT_TOP ${CHS} "安装程序检测到最佳的安装位置。如果你要改变目录,现在手动修改。"

LangString MUI_PAGE_ASSOCIATION_HEADER_TEXT ${ENG} "Choose Install Options"
LangString MUI_PAGE_ASSOCIATION_HEADER_TEXT ${CHS} "选择安装选项"

LangString MUI_PAGE_ASSOCIATION_HEADER_SUBTEXT ${ENG} "Choose where to install Winamp icons and what media to associate with Winamp"
LangString MUI_PAGE_ASSOCIATION_HEADER_SUBTEXT ${CHS} "选择安装 Winamp 图标的位置和关联到 Winamp 的媒体类型"

LangString MUI_PAGE_ASSOCIATION_TEXT_TOP ${ENG} "Select which icons you want installed, and whether you want files and CDs associated with"
LangString MUI_PAGE_ASSOCIATION_TEXT_TOP ${CHS} "选择你要安装的图标,和你是否让文件和 CD 与 Winamp 关联。"

LangString MUI_PAGE_ASSOCIATION_TEXT_COMPLIST ${ENG} "Select icons to install and media associations:"
LangString MUI_PAGE_ASSOCIATION_TEXT_COMPLIST ${CHS} "选择安装的图标和媒体关联:"

LangString MUI_PAGE_OPTION2_HEADER_TEXT ${ENG} "Internet Connection and Language Settings"
LangString MUI_PAGE_OPTION2_HEADER_TEXT ${CHS} "Internet 连接和语言设置"

LangString MUI_PAGE_OPTION2_HEADER_SUBTEXT ${ENG} "Configure Winamp's path to the Internet and select your language."
LangString MUI_PAGE_OPTION2_HEADER_SUBTEXT ${CHS} "配置 Winamp 连接到 Internet 的方式并选择你的语言。"

LangString MUI_PAGE_OPTION2_FIELD1_TEXT ${ENG} "Select your internet connection type:"
LangString MUI_PAGE_OPTION2_FIELD1_TEXT ${CHS} "选择你的 Internet 连接类型:"

LangString MUI_PAGE_OPTION2_FIELD2_STATE ${ENG} "Always connected (LAN, DSL, Cable)"
LangString MUI_PAGE_OPTION2_FIELD2_STATE ${CHS} "总是连接(LAN, DSL, Cable)"

LangString MUI_PAGE_OPTION2_FIELD2_LISTITEMS ${ENG} "Always connected (LAN, DSL, Cable)|Connected via dial-up (Modem)|Not connected to the internet"
LangString MUI_PAGE_OPTION2_FIELD2_LISTITEMS ${CHS} "总是连接(LAN, DSL, Cable)|通过拨号连接(Modem)|不连接到 Internet"

LangString MUI_PAGE_OPTION2_FIELD4_TEXT ${ENG} "(Optional) Specify HTTP proxy Server address: 'Server:Port'"
LangString MUI_PAGE_OPTION2_FIELD4_TEXT ${CHS} "(可选项)指定 HTTP 代理服务器地址: '服务器:端口'"

LangString MUI_PAGE_OPTION2_FIELD5_TEXT ${ENG} "Use proxy only for port 80 URLs"
LangString MUI_PAGE_OPTION2_FIELD5_TEXT ${CHS} "只对 80 端口 URL 使用代理"

LangString MUI_PAGE_OPTION2_FIELD6_TEXT ${ENG} "Display menus and dialog boxes in the following language:"
LangString MUI_PAGE_OPTION2_FIELD6_TEXT ${CHS} "使用下列语言显示菜单和对话框:"

LangString MUI_PAGE_OPTION2_FIELD7_STATE ${ENG} "English (US)"
LangString MUI_PAGE_OPTION2_FIELD7_STATE ${CHS} "English (US)"

LangString MUI_PAGE_OPTION2_FIELD7_LISTITEMS ${ENG} "English (US)"
LangString MUI_PAGE_OPTION2_FIELD7_LISTITEMS ${CHS} "English (US)"

LangString MUI_PAGE_OPTION3_HEADER_TEXT ${ENG} "Interface and Skin Selection"
LangString MUI_PAGE_OPTION3_HEADER_TEXT ${CHS} "界面和外观选择"

LangString MUI_PAGE_OPTION3_HEADER_SUBTEXT ${ENG} "Customize Winamp's interface to your preference."
LangString MUI_PAGE_OPTION3_HEADER_SUBTEXT ${CHS} "自定义适合你的品味的 Winamp 界面。"

LangString MUI_PAGE_OPTION3_FIELD1_TEXT ${ENG} "Select which skin you want Winamp to use once installed. You may change skins later using"
LangString MUI_PAGE_OPTION3_FIELD1_TEXT ${CHS} "选择安装后 Winamp 使用哪一个面板。以后可以通过配置更改它。"

LangString MUI_PAGE_OPTION3_FIELD2_TEXT ${ENG} "Classic skin - (Optimized for slower PCs and improved accessibility)"
LangString MUI_PAGE_OPTION3_FIELD2_TEXT ${CHS} "经典面板 - (用于较慢的 PC 优化并增加易用性)"

LangString MUI_PAGE_OPTION3_FIELD3_TEXT ${ENG} "Modern skin - (Optimized for larger screens and improved usability)"
LangString MUI_PAGE_OPTION3_FIELD3_TEXT ${CHS} "现代外观 - (对较大屏幕优化并增加适用性)"

LangString MUI_PAGE_OPTION3_FIELD4_TEXT ${ENG} "Other installed skin:"
LangString MUI_PAGE_OPTION3_FIELD4_TEXT ${CHS} "其它已安装的外观"

LangString MUI_PAGE_OPTION3_FIELD8_TEXT ${ENG} "the Winamp Preferences."
LangString MUI_PAGE_OPTION3_FIELD8_TEXT ${CHS} "Winamp 的配置"

LangString UNINST_DISPLAY_NAME ${ENG} "Winamp (remove only)"
LangString UNINST_DISPLAY_NAME ${CHS} "Winamp (仅做移除用)"

LangString REGISTRYING ${ENG} "Registrying..."
LangString REGISTRYING ${CHS} "正在注册..."

LangString REG_MEDIA_FILE ${ENG} "Winamp media file"
LangString REG_MEDIA_FILE ${CHS} "Winamp 媒体文件"

LangString REG_PLAY ${ENG} "&Play in Winamp"
LangString REG_PLAY ${CHS} "用 Winamp 播放(&P)"

LangString REG_ENQUEUE ${ENG} "&Enqueue in Winamp"
LangString REG_ENQUEUE ${CHS} "加入 Winamp 队列(&E)"

LangString REG_ADD_BOOKMARK ${ENG} "Add to Winamp's &Bookmark list"
LangString REG_ADD_BOOKMARK ${CHS} "加入 Winamp 书签列表(&B)"

LangString REG_PLAYLIST_FILE ${ENG} "Winamp playlist file"
LangString REG_PLAYLIST_FILE ${CHS} "Winamp 播放列表文件"

LangString REG_EXT_INST_FILE ${ENG} "Winamp extension installation file"
LangString REG_EXT_INST_FILE ${CHS} "Winamp 扩展安装文件"

LangString RESTORE_ASSOC ${ENG} "Restore association:"
LangString RESTORE_ASSOC ${CHS} "恢复文件关联:"

LangString REMOVE_ASSOC ${ENG} "Remove association:"
LangString REMOVE_ASSOC ${CHS} "移除文件关联:"

LangString START_MENU_UNINST ${ENG} "Uninstall Winamp"
LangString START_MENU_UNINST ${CHS} "卸载 Winamp"

LangString MB_REBOOT_REQUIRED ${ENG} 'A reboot is required to complete the installation. $\r$\nReboot now? (If you wish to reboot later, select "no")'
LangString MB_REBOOT_REQUIRED ${CHS} '你需要重启来完成本次安装。$\r$\n现在重启吗?(如果你希望稍后重启,选择"否"'

LangString MB_NOT_COMPLETE_REMOVE ${ENG} "Not all files in $INSTDIR were not removed.$\r$\nIf you wish to remove the files yourself, please do so."
LangString MB_NOT_COMPLETE_REMOVE ${CHS} "$INSTDIR 还留有未被移除的文件。$\r$\n如果你希望自己移除,请手动移除"

LangString MB_UNINST_FINISH ${ENG} "Uninstall complete"
LangString MB_UNINST_FINISH ${CHS} "卸载完成"

资源文件点击另存