205 lines
4.4 KiB
Plaintext
205 lines
4.4 KiB
Plaintext
; waplugin.nsi
|
|
;
|
|
; This script will generate an installer that installs a Winamp 2 plug-in.
|
|
;
|
|
; This installer will automatically alert the user that installation was
|
|
; successful, and ask them whether or not they would like to make the
|
|
; plug-in the default and run Winamp.
|
|
|
|
;--------------------------------
|
|
|
|
; Uncomment the next line to enable auto Winamp download
|
|
; !define WINAMP_AUTOINSTALL
|
|
|
|
; The name of the installer
|
|
Name "TinyVis Plug-in"
|
|
|
|
; The file to write
|
|
OutFile "waplugin.exe"
|
|
|
|
; The default installation directory
|
|
InstallDir $PROGRAMFILES\Winamp
|
|
|
|
; detect winamp path from uninstall string if available
|
|
InstallDirRegKey HKLM \
|
|
"Software\Microsoft\Windows\CurrentVersion\Uninstall\Winamp" \
|
|
"UninstallString"
|
|
|
|
; The text to prompt the user to enter a directory
|
|
DirText "Please select your Winamp path below (you will be able to proceed when Winamp is detected):"
|
|
# currently doesn't work - DirShow hide
|
|
|
|
; automatically close the installer when done.
|
|
AutoCloseWindow true
|
|
|
|
; hide the "show details" box
|
|
ShowInstDetails nevershow
|
|
|
|
; Request application privileges for Windows Vista
|
|
RequestExecutionLevel admin
|
|
|
|
;--------------------------------
|
|
|
|
;Pages
|
|
|
|
Page directory
|
|
Page instfiles
|
|
|
|
;--------------------------------
|
|
|
|
; The stuff to install
|
|
|
|
Section ""
|
|
|
|
!ifdef WINAMP_AUTOINSTALL
|
|
Call MakeSureIGotWinamp
|
|
!endif
|
|
|
|
Call QueryWinampVisPath
|
|
SetOutPath $1
|
|
|
|
; File to extract
|
|
#File "C:\program files\winamp\plugins\vis_nsfs.dll"
|
|
File /oname=vis_nsfs.dll "${NSISDIR}\Plugins\x86-ansi\TypeLib.dll" # dummy plug-in
|
|
|
|
; prompt user, and if they select no, go to NoWinamp
|
|
MessageBox MB_YESNO|MB_ICONQUESTION \
|
|
"The plug-in was installed. Would you like to run Winamp now with TinyVis as the default plug-in?" \
|
|
IDNO NoWinamp
|
|
WriteINIStr "$INSTDIR\Winamp.ini" "Winamp" "visplugin_name" "vis_nsfs.dll"
|
|
WriteINIStr "$INSTDIR\Winamp.ini" "Winamp" "visplugin_num" "0"
|
|
Exec '"$INSTDIR\Winamp.exe"'
|
|
NoWinamp:
|
|
|
|
SectionEnd
|
|
|
|
;--------------------------------
|
|
|
|
Function .onVerifyInstDir
|
|
|
|
!ifndef WINAMP_AUTOINSTALL
|
|
|
|
;Check for Winamp installation
|
|
|
|
IfFileExists $INSTDIR\Winamp.exe Good
|
|
Abort
|
|
Good:
|
|
|
|
!endif ; WINAMP_AUTOINSTALL
|
|
|
|
FunctionEnd
|
|
|
|
Function QueryWinampVisPath ; sets $1 with vis path
|
|
|
|
StrCpy $1 $INSTDIR\Plugins
|
|
; use DSPDir instead of VISDir to get DSP plugins directory
|
|
ReadINIStr $9 $INSTDIR\winamp.ini Winamp VisDir
|
|
StrCmp $9 "" End
|
|
IfFileExists $9 0 End
|
|
StrCpy $1 $9 ; update dir
|
|
End:
|
|
|
|
FunctionEnd
|
|
|
|
!ifdef WINAMP_AUTOINSTALL
|
|
|
|
Function GetWinampInstPath
|
|
|
|
Push $0
|
|
Push $1
|
|
Push $2
|
|
ReadRegStr $0 HKLM \
|
|
"Software\Microsoft\Windows\CurrentVersion\Uninstall\Winamp" \
|
|
"UninstallString"
|
|
StrCmp $0 "" fin
|
|
|
|
StrCpy $1 $0 1 0 ; get firstchar
|
|
StrCmp $1 '"' "" getparent
|
|
; if first char is ", let's remove "'s first.
|
|
StrCpy $0 $0 "" 1
|
|
StrCpy $1 0
|
|
rqloop:
|
|
StrCpy $2 $0 1 $1
|
|
StrCmp $2 '"' rqdone
|
|
StrCmp $2 "" rqdone
|
|
IntOp $1 $1 + 1
|
|
Goto rqloop
|
|
rqdone:
|
|
StrCpy $0 $0 $1
|
|
getparent:
|
|
; the uninstall string goes to an EXE, let's get the directory.
|
|
StrCpy $1 -1
|
|
gploop:
|
|
StrCpy $2 $0 1 $1
|
|
StrCmp $2 "" gpexit
|
|
StrCmp $2 "\" gpexit
|
|
IntOp $1 $1 - 1
|
|
Goto gploop
|
|
gpexit:
|
|
StrCpy $0 $0 $1
|
|
|
|
StrCmp $0 "" fin
|
|
IfFileExists $0\winamp.exe fin
|
|
StrCpy $0 ""
|
|
fin:
|
|
Pop $2
|
|
Pop $1
|
|
Exch $0
|
|
|
|
FunctionEnd
|
|
|
|
Function MakeSureIGotWinamp
|
|
|
|
Call GetWinampInstPath
|
|
|
|
Pop $0
|
|
StrCmp $0 "" getwinamp
|
|
Return
|
|
|
|
getwinamp:
|
|
|
|
Call ConnectInternet ;Make an internet connection (if no connection available)
|
|
|
|
StrCpy $2 "$TEMP\Winamp Installer.exe"
|
|
NSISdl::download http://download.nullsoft.com/winamp/client/winamp281_lite.exe $2
|
|
Pop $0
|
|
StrCmp $0 success success
|
|
SetDetailsView show
|
|
DetailPrint "download failed: $0"
|
|
Abort
|
|
success:
|
|
ExecWait '"$2" /S'
|
|
Delete $2
|
|
Call GetWinampInstPath
|
|
Pop $0
|
|
StrCmp $0 "" skip
|
|
StrCpy $INSTDIR $0
|
|
skip:
|
|
|
|
FunctionEnd
|
|
|
|
Function ConnectInternet
|
|
|
|
Push $R0
|
|
|
|
ClearErrors
|
|
Dialer::AttemptConnect
|
|
IfErrors noie3
|
|
|
|
Pop $R0
|
|
StrCmp $R0 "online" connected
|
|
MessageBox MB_OK|MB_ICONSTOP "Cannot connect to the internet."
|
|
Quit
|
|
|
|
noie3:
|
|
|
|
; IE3 not installed
|
|
MessageBox MB_OK|MB_ICONINFORMATION "Please connect to the internet now."
|
|
|
|
connected:
|
|
|
|
Pop $R0
|
|
|
|
FunctionEnd
|
|
|
|
!endif ; WINAMP_AUTOINSTALL |