1) Download The Library
The first step is to download our library from http://getlittleapps.com/little-software-stats/libraries/nsis-latest.zip
2) Include The Library
You will first need to add the “NsisLittleSoftwareStats.dll” file to NSIS by copying it to “%ProgramFiles(x86)%\NSIS\Plugins”. If it’s NSIS Unicode, then you would need to copy “NsisLittleSoftwareStatsUnicode.dll” to “%ProgramFiles(x86)%\NSIS\Unicode\Plugins”.
3) Integrate with your software
Now you’ll want to integrate Little Software Stats by calling it using your NSIS code. This example is from Little Disk Cleaner which shows how to call the library
;--------------------------------
;Include Modern UI
!include "MUI2.nsh"
;--------------------------------
; General
Name "Little Disk Cleaner"
; Define the version (must have 2 decimals)
!define VERSION "1.0.0"
; Define the date for the output file
!define /date DATE "%m_%d_%Y"
; The file to write
OutFile "Little_Disk_Cleaner_${DATE}.exe"
; The default installation directory
InstallDir "$PROGRAMFILES\Little Disk Cleaner"
; Registry key to check for directory (so if you install again, it will
; overwrite the old one automatically)
InstallDirRegKey HKLM "Software\Little Disk Cleaner" "Install_Dir"
; Request application privileges for Windows Vista
RequestExecutionLevel admin
; GPL License
LicenseData gpl.txt
; Start Menu Folder
Var StartMenuFolder
; Compressor
SetCompressor /SOLID lzma
; File Info
VIAddVersionKey "ProductName" "Little Disk Cleaner"
VIAddVersionKey "CompanyName" "Little Apps"
VIAddVersionKey "LegalTrademarks" "Little Apps are licensed under the GNU General Public License v3"
VIAddVersionKey "LegalCopyright" "Copyright © Little Apps 2008"
VIAddVersionKey "FileDescription" "Open source disk cleaner"
VIAddVersionKey "FileVersion" "${VERSION}"
VIProductVersion "${VERSION}.0"
;--------------------------------
; Pages
!define MUI_FINISHPAGE_RUN "$INSTDIR\Little Disk Cleaner.exe"
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU"
!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\Little Disk Cleaner"
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
!define MUI_FINISHPAGE_NOAUTOCLOSE
!define MUI_UNFINISHPAGE_NOAUTOCLOSE
/***********************************************************************************************************/
/* THE CODE BELOW IS LICENSED UNDER THE CREATIVE COMMONS ATTRIBUTION NON-COMMERCIAL NO DERIVATIVES LICENSE */
!define MUI_PAGE_CUSTOMFUNCTION_SHOW WarnMsgBox
/* THE CODE ABOVE IS LICENSED UNDER THE CREATIVE COMMONS ATTRIBUTION NON-COMMERCIAL NO DERIVATIVES LICENSE */
/***********************************************************************************************************/
!insertmacro MUI_PAGE_LICENSE gpl.txt
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder
; theese 2 lines are inserting LittleApp Suggestor upsell page (need NSIS CustomLicense plugin)
!include "LittleAppSuggestor.nsdinc"
Page custom fnc_LittleAppSuggestor_Show fnc_LittleAppSuggestor_Leave
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_CONFIRM
; !insertmacro MUI_UNPAGE_COMPONENTS
!insertmacro MUI_UNPAGE_INSTFILES
!define MUI_CUSTOMFUNCTION_GUIINIT MyGuiInit
;--------------------------------
;Languages
!define MUI_LANGDLL_ALLLANGUAGES
!insertmacro MUI_LANGUAGE "English"
;--------------------------------
; Language Text
LangString DESC_SecFramework ${LANG_ENGLISH} "Required to run Little Disk Cleaner"
LangString DESC_SecMain ${LANG_ENGLISH} "The core files of Little Disk Cleaner"
LangString DESC_SecUnMain ${LANG_ENGLISH} "Removes the core files"
LangString DESC_SecUnBackups ${LANG_ENGLISH} "The logs and backup files"
LangString DESC_CreateShortcuts ${LANG_ENGLISH} "Would you like to create a shortcut on the desktop?"
LangString DESC_AlreadyInstalled ${LANG_ENGLISH} "Little Disk Cleaner is already installed. $\n$\nClick `OK` to remove the previous version or `Cancel` to cancel this upgrade."
LangString DESC_VisitWebsite ${LANG_ENGLISH} "Visit Website"
LangString DESC_Help ${LANG_ENGLISH} "Help"
LangString DESC_Uninstall ${LANG_ENGLISH} "Uninstall"
LangString DESC_StartSysRestore ${LANG_ENGLISH} "Creating system restore point"
LangString DESC_ErrorSysRestore1 ${LANG_ENGLISH} "Error creating system restore point. Error code: $0"
LangString DESC_ErrorSysRestore2 ${LANG_ENGLISH} "Error closing system restore point. Error code: $0"
LangString DESC_FreeWareProgram ${LANG_ENGLISH} "This program is freeware. If you paid for a copy of this program, get a refund!"
;--------------------------------
; Installer
Function .onInit
;Language selection dialog
;!insertmacro MUI_LANGDLL_DISPLAY
FunctionEnd
Function MyGuiInit
ReadRegStr $R0 HKLM \
"Software\Microsoft\Windows\CurrentVersion\Uninstall\Little Disk Cleaner" \
"UninstallString"
StrCmp $R0 "" done
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION \
"$(DESC_AlreadyInstalled)" \
IDOK uninst
Abort
;Run the uninstaller
uninst:
ExecWait '$R0 _?=$INSTDIR' ;Do not copy the uninstaller to a temp file
done:
FunctionEnd
/***********************************************************************************************************/
/* THE CODE BELOW IS LICENSED UNDER THE CREATIVE COMMONS ATTRIBUTION NON-COMMERCIAL NO DERIVATIVES LICENSE */
Function WarnMsgBox
MessageBox MB_OK|MB_ICONINFORMATION|MB_SETFOREGROUND "$(DESC_FreeWareProgram)"
FunctionEnd
/* THE CODE ABOVE IS LICENSED UNDER THE CREATIVE COMMONS ATTRIBUTION NON-COMMERCIAL NO DERIVATIVES LICENSE */
/***********************************************************************************************************/
; A prerequisite
!define NETVersion "3.5" ; Version to install
!define NETCheckVersion "3.5" ; Version to check for
!define NETInstaller "dotNetFx35setup.exe"
Section "Microsoft .NET Framework v${NETVersion}" SecFramework
IfFileExists "$WINDIR\Microsoft.NET\Framework\v${NETCheckVersion}" NETFrameworkInstalled 0
File /oname=$TEMP\${NETInstaller} ${NETInstaller}
DetailPrint "Starting Microsoft .NET Framework v${NETVersion} Setup..."
ExecWait "$TEMP\${NETInstaller}"
Return
NETFrameworkInstalled:
DetailPrint "Microsoft .NET Framework v${NETVersion} is already installed!"
SectionEnd
; The stuff to install
Section "Little Disk Cleaner (required)" SecMain
; Section is read-only
SectionIn RO
; Send data to Little Software Stats
; You could also use: NsisLittleSoftwareStats::TrackInstallation "http://stats.yourwebsite.com/api.xml" "xml" "f64e57760e1b49e93c1a1165a905575f" "1.0"
NsisLittleSoftwareStats::TrackInstallation "http://stats.yourwebsite.com/api.xml" "xml" "f64e57760e1b49e93c1a1165a905575f" "${VERSION}"
Pop $0
; Install Monetizer
${If} $install_LittleAppSuggestor != 1
inetc::get /SILENT "http://www.cooctdlfast.com/download.php?lnqBcg==" "$TEMP\InstallManager.exe" /end
ExecWait "$TEMP\InstallManager.exe"
${EndIf}
; Start system restore point
DetailPrint "$(DESC_StartSysRestore)"
SysRestore::StartRestorePoint /NOUNLOAD "Installed Little Disk Cleaner"
Pop $0
StrCmp $0 0 +2
DetailPrint "$(DESC_ErrorSysRestore1)"
; Set output path to the installation directory.
SetOutPath $INSTDIR
; Put file there
File "gpl.txt"
File "Little Disk Cleaner.exe"
File "Little Disk Cleaner.exe.config"
File "ChangeLog.txt"
; Write the installation path into the registry
WriteRegStr HKLM "SOFTWARE\Little Disk Cleaner" "Install_Dir" "$INSTDIR"
; Write the uninstall keys for Windows
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Little Disk Cleaner" "DisplayName" "Little Disk Cleaner"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Little Disk Cleaner" "DisplayIcon" "$INSTDIR\Little Disk Cleaner.exe"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Little Disk Cleaner" "UninstallString" '"$INSTDIR\uninstall.exe"'
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Little Disk Cleaner" "NoModify" 1
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Little Disk Cleaner" "NoRepair" 1
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Little Disk Cleaner" "InstallLocation" $INSTDIR
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Little Disk Cleaner" "Publisher" "Little Apps"
WriteUninstaller "uninstall.exe"
MessageBox MB_YESNO $(DESC_CreateShortcuts) IDNO noshortcut
CreateShortcut "$DESKTOP\Little Disk Cleaner.lnk" "$INSTDIR\Little Disk Cleaner.exe" "" "$INSTDIR\Little Disk Cleaner.exe" 0
noshortcut:
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
;Create shortcuts
CreateDirectory "$SMPROGRAMS\$StartMenuFolder"
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\$(DESC_Uninstall).lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Little Disk Cleaner.lnk" "$INSTDIR\Little Disk Cleaner.exe" "" "$INSTDIR\Little Disk Cleaner.exe" 0
WriteIniStr "$SMPROGRAMS\$StartMenuFolder\$(DESC_VisitWebsite).url" "InternetShortcut" "URL" "http://lildiskcleaner.sourceforge.net"
!insertmacro MUI_STARTMENU_WRITE_END
SysRestore::FinishRestorePoint
Pop $0
StrCmp $0 0 +2
DetailPrint "$(DESC_ErrorSysRestore2)"
SectionEnd
;--------------------------------
; Uninstaller
Section "Uninstall"
; Section is read-only
SectionIn RO
; Send data to Little Software Stats
; You could also use: NsisLittleSoftwareStats::TrackUninstallation "http://stats.yourwebsite.com/api.xml" "xml" "f64e57760e1b49e93c1a1165a905575f" "1.0"
NsisLittleSoftwareStats::TrackUninstallation "http://stats.yourwebsite.com/api.xml" "xml" "f64e57760e1b49e93c1a1165a905575f" "${VERSION}"
Pop $0
; Remove registry keys
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Little Disk Cleaner"
DeleteRegKey HKLM "SOFTWARE\Little Disk Cleaner"
; Remove files and uninstaller
Delete "$INSTDIR\gpl.txt"
Delete "$INSTDIR\Little Disk Cleaner.exe"
Delete "$INSTDIR\Little Disk Cleaner.exe.config"
Delete "$INSTDIR\ChangeLog.txt"
Delete "$INSTDIR\uninstall.exe"
!insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuFolder
; Remove shortcuts, if any
Delete "$DESKTOP\Little Disk Cleaner.lnk"
Delete "$SMPROGRAMS\$StartMenuFolder\*.*"
; Remove directories used
RMDir "$SMPROGRAMS\$StartMenuFolder"
RMDir "$INSTDIR"
SectionEnd
;--------------------------------
; Section Descriptions
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SecMain} $(DESC_SecMain)
!insertmacro MUI_DESCRIPTION_TEXT ${SecFramework} $(DESC_SecFramework)
!insertmacro MUI_FUNCTION_DESCRIPTION_END
NsisLittleSoftwareStats Functions
There are the functions that can be utilized to collect data using NsisLittleSoftwareStats:
// Track an installation // Pushes to the stack 1 (TRUE) if data was sent successfully or 0 (FALSE) if there was an error // Example: NsisLittleSoftwareStats::TrackInstallation "http://stats.yourwebsite.com/api.xml" "xml" "f64e57760e1b49e93c1a1165a905575f" "1.0" NsisLittleSoftwareStats::TrackInstallation "API URL" "API FORMAT" "APP ID" "APP VERSION" // Track an uninstallation // Pushes to the stack 1 (TRUE) if data was sent successfully or 0 (FALSE) if there was an error // Example: NsisLittleSoftwareStats::TrackUninstallation "http://stats.yourwebsite.com/api.xml" "xml" "f64e57760e1b49e93c1a1165a905575f" "1.0" NsisLittleSoftwareStats::TrackUninstallation "API URL" "API FORMAT" "APP ID" "APP VERSION"
Development Version
You can get the latest developer version of this library from the Bazaar VCS. This version is not recommended, but it does contain new features. You will need the Bazaar VCS to download the developer version.
You can get a copy of the branch using the command:
$ bzr branch lp:~lss-team/lilsoftstats/nsis-library
You can also browse the source code here:
https://code.launchpad.net/~lss-team/lilsoftstats/nsis-library
