mirror of https://github.com/PurpleI2P/i2pd.git
R4SAS
8 years ago
committed by
GitHub
21 changed files with 23 additions and 2616 deletions
@ -1,14 +0,0 @@ |
|||||||
* |
|
||||||
!*/ |
|
||||||
|
|
||||||
!*.h |
|
||||||
!*.cpp |
|
||||||
|
|
||||||
!*.bat |
|
||||||
|
|
||||||
!*.sln |
|
||||||
!*.vcproj |
|
||||||
!*.vcxproj |
|
||||||
!*.vcxproj.filters |
|
||||||
!*.iss |
|
||||||
!.gitignore |
|
@ -1,14 +0,0 @@ |
|||||||
@echo off |
|
||||||
convert Itoopie.svg ^ |
|
||||||
-fuzz 90%% -fill transparent -floodfill 2x2 white -fuzz 20%% -fill #AE0E99 -opaque red ^ |
|
||||||
-fill #FBBC11 -opaque yellow ^ |
|
||||||
( -clone 0 -resize 256x256 ) ^ |
|
||||||
( -clone 0 -resize 128x128 ) ^ |
|
||||||
( -clone 0 -resize 64x64 ) ^ |
|
||||||
( -clone 0 -resize 48x48 ) ^ |
|
||||||
( -clone 0 -resize 32x32 ) ^ |
|
||||||
( -clone 0 -resize 24x24 ) ^ |
|
||||||
( -clone 0 -resize 16x16 ) ^ |
|
||||||
( -size 150x57 xc:white -clone 0 -geometry 57x57+46+0 -composite -gravity center -write BMP3:ictoopie.bmp +delete ) ^ |
|
||||||
( -clone 0 -write Itoopie_purple.png +delete ) ^ |
|
||||||
-delete 0 ictoopie.ico |
|
@ -1,282 +0,0 @@ |
|||||||
# NSIS Installer script. (Tested with NSIS 2.64 on Windows 7) |
|
||||||
# Author: Mikal Villa (Meeh) |
|
||||||
# Version: 1.1 |
|
||||||
Name PurpleI2P |
|
||||||
|
|
||||||
RequestExecutionLevel highest |
|
||||||
SetCompressor /SOLID lzma |
|
||||||
ShowInstDetails show |
|
||||||
|
|
||||||
# General Symbol Definitions |
|
||||||
!define REGKEY "SOFTWARE\$(^Name)" |
|
||||||
!define VERSION 0.3.0.0 |
|
||||||
!define COMPANY "The Privacy Solutions Project" |
|
||||||
!define URL "https://i2p.io" |
|
||||||
|
|
||||||
# MUI Symbol Definitions |
|
||||||
!define MUI_ICON "mask.ico" |
|
||||||
#!define MUI_WELCOMEFINISHPAGE_BITMAP "../share/pixmaps/nsis-wizard.bmp" |
|
||||||
!define MUI_HEADERIMAGE |
|
||||||
!define MUI_HEADERIMAGE_RIGHT |
|
||||||
#!define MUI_HEADERIMAGE_BITMAP "../share/pixmaps/nsis-header.bmp" |
|
||||||
!define MUI_FINISHPAGE_NOAUTOCLOSE |
|
||||||
!define MUI_STARTMENUPAGE_REGISTRY_ROOT HKLM |
|
||||||
!define MUI_STARTMENUPAGE_REGISTRY_KEY ${REGKEY} |
|
||||||
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME StartMenuGroup |
|
||||||
!define MUI_STARTMENUPAGE_DEFAULTFOLDER PurpleI2P |
|
||||||
!define MUI_FINISHPAGE_RUN $INSTDIR\i2pd.exe |
|
||||||
!define MUI_FINISHPAGE_SHOWREADME $INSTDIR\Readme.txt |
|
||||||
|
|
||||||
|
|
||||||
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico" |
|
||||||
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "../share/pixmaps/nsis-wizard.bmp" |
|
||||||
!define MUI_UNFINISHPAGE_NOAUTOCLOSE |
|
||||||
|
|
||||||
# Included files |
|
||||||
!include Sections.nsh |
|
||||||
!include MUI2.nsh |
|
||||||
!include nsDialogs.nsh |
|
||||||
!include winmessages.nsh |
|
||||||
!include logiclib.nsh |
|
||||||
# Local included files |
|
||||||
!include nsi\helper_readme.nsh |
|
||||||
;!include nsi\servicelib.nsh |
|
||||||
|
|
||||||
# Variables |
|
||||||
Var StartMenuGroup |
|
||||||
|
|
||||||
# Installer pages |
|
||||||
# Execution flow of installer windows |
|
||||||
!insertmacro MUI_PAGE_WELCOME |
|
||||||
!insertmacro MUI_PAGE_README "../Readme.md" |
|
||||||
!insertmacro MUI_PAGE_DIRECTORY |
|
||||||
# Disabled for now. Use the bat |
|
||||||
;Page custom mode_selection # Meeh's hack for installing and starting service. |
|
||||||
!insertmacro MUI_PAGE_STARTMENU Application $StartMenuGroup |
|
||||||
!insertmacro MUI_PAGE_INSTFILES |
|
||||||
!insertmacro MUI_PAGE_FINISH |
|
||||||
|
|
||||||
# Uninstall pages |
|
||||||
!insertmacro MUI_UNPAGE_CONFIRM |
|
||||||
!insertmacro MUI_UNPAGE_INSTFILES |
|
||||||
|
|
||||||
# Installer languages |
|
||||||
!insertmacro MUI_LANGUAGE English |
|
||||||
|
|
||||||
# Installer attributes |
|
||||||
OutFile PurpleI2P-0.3.0.0-win32-setup.exe |
|
||||||
InstallDir $PROGRAMFILES\PurpleI2P |
|
||||||
CRCCheck on |
|
||||||
XPStyle on |
|
||||||
BrandingText " " |
|
||||||
ShowInstDetails show |
|
||||||
VIProductVersion 0.3.0.0 |
|
||||||
VIAddVersionKey ProductName PurpleI2P |
|
||||||
VIAddVersionKey ProductVersion "${VERSION}" |
|
||||||
VIAddVersionKey CompanyName "${COMPANY}" |
|
||||||
VIAddVersionKey CompanyWebsite "${URL}" |
|
||||||
VIAddVersionKey FileVersion "${VERSION}" |
|
||||||
VIAddVersionKey FileDescription "" |
|
||||||
VIAddVersionKey LegalCopyright "" |
|
||||||
InstallDirRegKey HKCU "${REGKEY}" Path |
|
||||||
ShowUninstDetails show |
|
||||||
|
|
||||||
# Readme definitions |
|
||||||
|
|
||||||
;-------------------------------- |
|
||||||
;Languages |
|
||||||
;Set up install lang strings for 1st lang |
|
||||||
${ReadmeLanguage} "${LANG_ENGLISH}" \ |
|
||||||
"Read Me" \ |
|
||||||
"Please review the following important information." \ |
|
||||||
"About $(^name):" \ |
|
||||||
"$\n Click on scrollbar arrows or press Page Down to review the entire text." |
|
||||||
|
|
||||||
;Add 2nd language |
|
||||||
!insertmacro MUI_LANGUAGE "Norwegian" |
|
||||||
|
|
||||||
;set up install lang strings for second lang |
|
||||||
${ReadmeLanguage} "${LANG_NORWEGIAN}" \ |
|
||||||
"Les meg!" \ |
|
||||||
"Vennligst les informasjonen om hvordan du skal bruke PurpleI2P." \ |
|
||||||
"Om $(^name):" \ |
|
||||||
"$\n Klikk på scrollbaren til høyre for å se hele innholdet." |
|
||||||
|
|
||||||
;-------------------------------- |
|
||||||
|
|
||||||
# Installer sections |
|
||||||
Section -Main SEC0000 |
|
||||||
SetOutPath $INSTDIR |
|
||||||
SetOverwrite on |
|
||||||
File /oname=i2pd.exe Release\i2pd.exe |
|
||||||
File /oname=install_service.bat install_service.bat |
|
||||||
File /oname=uninstall_service.bat uninstall_service.bat |
|
||||||
File /oname=LICENSE.txt ..\LICENSE |
|
||||||
File /oname=Readme.txt ..\README.md |
|
||||||
SetOutPath $INSTDIR\src |
|
||||||
File /r /x *.nsi /x *.rc /x *.exe /x *.obj /x *.nsh /x *.sln /x *.vcxproj /x *.tlog /x *.log /x *.res /x *.pdb /x *.suo /x *.opensdf /x *.filters /x *.sdf /x *.iss /x *.aps /x .gitignore /x *.o ../\*.* |
|
||||||
SetOutPath $INSTDIR |
|
||||||
RMDir /r /REBOOTOK $INSTDIR\src\.git # Remove git directory |
|
||||||
RMDir /r /REBOOTOK $INSTDIR\src\Win32\Release # Removing release directory |
|
||||||
RMDir /r /REBOOTOK $INSTDIR\src\Win32\nsi |
|
||||||
WriteRegStr HKCU "${REGKEY}\Components" Main 1 |
|
||||||
SectionEnd |
|
||||||
|
|
||||||
Section -post SEC0001 |
|
||||||
WriteRegStr HKCU "${REGKEY}" Path $INSTDIR |
|
||||||
SetOutPath $INSTDIR |
|
||||||
WriteUninstaller $INSTDIR\uninstall.exe |
|
||||||
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application |
|
||||||
CreateDirectory $SMPROGRAMS\$StartMenuGroup |
|
||||||
CreateShortcut "$SMPROGRAMS\$StartMenuGroup\PurpleI2P.lnk" $INSTDIR\i2pd.exe |
|
||||||
CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Install PurpleI2P Service.lnk" $INSTDIR\install_service.bat |
|
||||||
CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Uninstall PurpleI2P Service.lnk" $INSTDIR\uninstall_service.bat |
|
||||||
CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Uninstall PurpleI2P.lnk" $INSTDIR\uninstall.exe |
|
||||||
!insertmacro MUI_STARTMENU_WRITE_END |
|
||||||
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayName "$(^Name)" |
|
||||||
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayVersion "${VERSION}" |
|
||||||
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" Publisher "${COMPANY}" |
|
||||||
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" URLInfoAbout "${URL}" |
|
||||||
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayIcon $INSTDIR\uninstall.exe |
|
||||||
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" UninstallString $INSTDIR\uninstall.exe |
|
||||||
WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoModify 1 |
|
||||||
WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoRepair 1 |
|
||||||
WriteRegStr HKCR "i2pd" "URL Protocol" "" |
|
||||||
WriteRegStr HKCR "i2pd" "" "URL:i2pd" # TODO: if a instance of own is found, relaunch with a proxyfied browser to open webage. (e.g i2pd://meeh.i2p) |
|
||||||
WriteRegStr HKCR "i2pd\DefaultIcon" "" $INSTDIR\i2pd.exe |
|
||||||
WriteRegStr HKCR "i2pd\shell\open\command" "" '"$INSTDIR\i2pd.exe" "%1"' |
|
||||||
SectionEnd |
|
||||||
|
|
||||||
# Macro for selecting uninstaller sections |
|
||||||
!macro SELECT_UNSECTION SECTION_NAME UNSECTION_ID |
|
||||||
Push $R0 |
|
||||||
ReadRegStr $R0 HKCU "${REGKEY}\Components" "${SECTION_NAME}" |
|
||||||
StrCmp $R0 1 0 next${UNSECTION_ID} |
|
||||||
!insertmacro SelectSection "${UNSECTION_ID}" |
|
||||||
GoTo done${UNSECTION_ID} |
|
||||||
next${UNSECTION_ID}: |
|
||||||
!insertmacro UnselectSection "${UNSECTION_ID}" |
|
||||||
done${UNSECTION_ID}: |
|
||||||
Pop $R0 |
|
||||||
!macroend |
|
||||||
|
|
||||||
|
|
||||||
# Uninstaller sections |
|
||||||
Section /o -un.Main UNSEC0000 |
|
||||||
Delete /REBOOTOK $INSTDIR\i2pd.exe |
|
||||||
Delete /REBOOTOK $INSTDIR\LICENSE.txt |
|
||||||
Delete /REBOOTOK $INSTDIR\Readme.txt |
|
||||||
Delete /REBOOTOK $INSTDIR\install_service.bat |
|
||||||
Delete /REBOOTOK $INSTDIR\uninstall_service.bat |
|
||||||
RMDir /r /REBOOTOK $INSTDIR\src |
|
||||||
DeleteRegValue HKCU "${REGKEY}\Components" Main |
|
||||||
SectionEnd |
|
||||||
|
|
||||||
Section -un.post UNSEC0001 |
|
||||||
DeleteRegKey HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" |
|
||||||
Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\Uninstall PurpleI2P.lnk" |
|
||||||
Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\PurpleI2P.lnk" |
|
||||||
Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\Install PurpleI2P Service.lnk" |
|
||||||
Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\UnInstall PurpleI2P Service.lnk" |
|
||||||
Delete /REBOOTOK "$SMSTARTUP\PurpleI2P.lnk" |
|
||||||
Delete /REBOOTOK $INSTDIR\uninstall.exe |
|
||||||
Delete /REBOOTOK $INSTDIR\debug.log |
|
||||||
DeleteRegValue HKCU "${REGKEY}" StartMenuGroup |
|
||||||
DeleteRegValue HKCU "${REGKEY}" Path |
|
||||||
DeleteRegKey /IfEmpty HKCU "${REGKEY}\Components" |
|
||||||
DeleteRegKey /IfEmpty HKCU "${REGKEY}" |
|
||||||
DeleteRegKey HKCR "i2pd" |
|
||||||
RmDir /REBOOTOK $SMPROGRAMS\$StartMenuGroup |
|
||||||
RmDir /REBOOTOK $INSTDIR |
|
||||||
Push $R0 |
|
||||||
StrCpy $R0 $StartMenuGroup 1 |
|
||||||
StrCmp $R0 ">" no_smgroup |
|
||||||
no_smgroup: |
|
||||||
Pop $R0 |
|
||||||
SectionEnd |
|
||||||
|
|
||||||
; var hwndExecModeRadio |
|
||||||
; var hwndRunServiceNowRadio |
|
||||||
|
|
||||||
; Function mode_selection |
|
||||||
; nsDialogs::Create 1018 |
|
||||||
; Pop $0 |
|
||||||
; ${NSD_CreateLabel} 0 10 75% 20u "How would you like PurpleI2P (i2pd) to run?" |
|
||||||
; Pop $0 |
|
||||||
|
|
||||||
; ${NSD_CreateRadioButton} 20 60 80% 25u "Service Mode" |
|
||||||
; Pop $hwndExecModeRadio |
|
||||||
; ${NSD_AddStyle} $hwndExecModeRadio ${WS_GROUP} |
|
||||||
|
|
||||||
; ${NSD_CreateRadioButton} 20 90 80% 25u "Command line Mode" |
|
||||||
; Pop $0 |
|
||||||
|
|
||||||
; ${NSD_CreateButton} 20 150 -40 14u "Do it!" |
|
||||||
; Pop $0 |
|
||||||
; ${NSD_OnClick} $0 perform_mode |
|
||||||
|
|
||||||
; nsDialogs::Show |
|
||||||
; FunctionEnd |
|
||||||
|
|
||||||
; Function start_now_selection |
|
||||||
; nsDialogs::Create 1018 |
|
||||||
; Pop $0 |
|
||||||
; ${NSD_CreateLabel} 0 10 75% 20u "Enable the service now?" |
|
||||||
; Pop $0 |
|
||||||
|
|
||||||
; ${NSD_CreateRadioButton} 20 60 80% 25u "Yes" |
|
||||||
; Pop $hwndRunServiceNowRadio |
|
||||||
; ${NSD_AddStyle} $hwndRunServiceNowRadio ${WS_GROUP} |
|
||||||
|
|
||||||
; ${NSD_CreateRadioButton} 20 90 80% 25u "No" |
|
||||||
; Pop $0 |
|
||||||
|
|
||||||
; ${NSD_CreateButton} 20 150 -40 14u "Do it!" |
|
||||||
; Pop $0 |
|
||||||
; ${NSD_OnClick} $0 perform_mode |
|
||||||
|
|
||||||
; nsDialogs::Show |
|
||||||
; FunctionEnd |
|
||||||
|
|
||||||
; Function perform_mode |
|
||||||
; ${NSD_GetState} $hwndExecModeRadio $0 |
|
||||||
; ${If} $0 = ${BST_CHECKED} |
|
||||||
; Call service_mode |
|
||||||
; ${EndIF} |
|
||||||
; FunctionEnd |
|
||||||
|
|
||||||
; Function start_now |
|
||||||
; ${NSD_GetState} $hwndRunServiceNowRadio $0 |
|
||||||
; ${If} $0 = ${BST_CHECKED} |
|
||||||
; Call start_now_selection |
|
||||||
; ${EndIF} |
|
||||||
; FunctionEnd |
|
||||||
|
|
||||||
; Function service_mode |
|
||||||
; Push "create" |
|
||||||
; Push "PurpleI2P Service" |
|
||||||
; Push "$INSTDIR\i2pd.exe;autostart=1;display=PurpleI2P" |
|
||||||
; Call Service |
|
||||||
; Pop $0 ; Actually more to write than !insertmacro, but much more fun :D |
|
||||||
; Push "start" |
|
||||||
; Push "PurpleI2P Service" |
|
||||||
; Call Service |
|
||||||
; Pop $0 |
|
||||||
; Call start_now |
|
||||||
; !define MUI_FINISHPAGE_RUN_NOTCHECKED |
|
||||||
; !define MUI_FINISHPAGE_RUN_TEXT "No need to run now since we already installed and launched it as a Windows service!" |
|
||||||
; FunctionEnd |
|
||||||
|
|
||||||
# Installer functions |
|
||||||
Function .onInit |
|
||||||
InitPluginsDir |
|
||||||
!insertmacro MUI_LANGDLL_DISPLAY |
|
||||||
FunctionEnd |
|
||||||
|
|
||||||
# Uninstaller functions |
|
||||||
Function un.onInit |
|
||||||
ReadRegStr $INSTDIR HKCU "${REGKEY}" Path |
|
||||||
!insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuGroup |
|
||||||
!insertmacro SELECT_UNSECTION Main ${UNSEC0000} |
|
||||||
!insertmacro MUI_UNGETLANGUAGE |
|
||||||
FunctionEnd |
|
@ -1,73 +1,36 @@ |
|||||||
// Microsoft Visual C++ generated resource script. |
|
||||||
// |
|
||||||
#include "resource.h" |
#include "resource.h" |
||||||
|
|
||||||
#define APSTUDIO_READONLY_SYMBOLS |
#define APSTUDIO_READONLY_SYMBOLS |
||||||
///////////////////////////////////////////////////////////////////////////// |
|
||||||
// |
|
||||||
// Generated from the TEXTINCLUDE 2 resource. |
|
||||||
// |
|
||||||
#include "winres.h" |
#include "winres.h" |
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////// |
|
||||||
#undef APSTUDIO_READONLY_SYMBOLS |
#undef APSTUDIO_READONLY_SYMBOLS |
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////// |
|
||||||
// English (United States) resources |
|
||||||
|
|
||||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) |
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) |
||||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US |
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US |
||||||
#pragma code_page(1252) |
#pragma code_page(1252) |
||||||
|
|
||||||
#ifdef APSTUDIO_INVOKED |
#ifdef APSTUDIO_INVOKED |
||||||
///////////////////////////////////////////////////////////////////////////// |
|
||||||
// |
|
||||||
// TEXTINCLUDE |
|
||||||
// |
|
||||||
|
|
||||||
1 TEXTINCLUDE |
1 TEXTINCLUDE |
||||||
BEGIN |
BEGIN |
||||||
"resource.h\0" |
"resource.h\0" |
||||||
END |
END |
||||||
|
|
||||||
2 TEXTINCLUDE |
2 TEXTINCLUDE |
||||||
BEGIN |
BEGIN |
||||||
"#include ""winres.h""\r\n" |
"#include ""winres.h""\r\n" |
||||||
"\0" |
"\0" |
||||||
END |
END |
||||||
|
|
||||||
3 TEXTINCLUDE |
3 TEXTINCLUDE |
||||||
BEGIN |
BEGIN |
||||||
"\r\n" |
"\r\n" |
||||||
"\0" |
"\0" |
||||||
END |
END |
||||||
|
#endif // APSTUDIO_INVOKED |
||||||
|
|
||||||
#endif // APSTUDIO_INVOKED |
MAINICON ICON "mask.ico" |
||||||
|
#endif // English (United States) resources |
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////// |
|
||||||
// |
|
||||||
// Icon |
|
||||||
// |
|
||||||
|
|
||||||
// Icon with lowest ID value placed first to ensure application icon |
|
||||||
// remains consistent on all systems. |
|
||||||
MAINICON ICON "mask.ico" |
|
||||||
//MAINICON ICON "anke.ico" |
|
||||||
|
|
||||||
#endif // English (United States) resources |
|
||||||
///////////////////////////////////////////////////////////////////////////// |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef APSTUDIO_INVOKED |
#ifndef APSTUDIO_INVOKED |
||||||
///////////////////////////////////////////////////////////////////////////// |
|
||||||
// |
|
||||||
// Generated from the TEXTINCLUDE 3 resource. |
|
||||||
// |
|
||||||
|
|
||||||
#include "Resource.rc2" |
#include "Resource.rc2" |
||||||
|
#endif // not APSTUDIO_INVOKED |
||||||
///////////////////////////////////////////////////////////////////////////// |
|
||||||
#endif // not APSTUDIO_INVOKED |
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 176 KiB |
@ -1,149 +0,0 @@ |
|||||||
|
|
||||||
#define I2Pd_AppName "i2pd" |
|
||||||
#define I2Pd_ver "0.2" |
|
||||||
|
|
||||||
[Setup] |
|
||||||
AppName={#I2Pd_AppName} |
|
||||||
AppVersion={#I2Pd_ver} |
|
||||||
DefaultDirName={pf}\I2Pd |
|
||||||
DefaultGroupName=I2Pd |
|
||||||
UninstallDisplayIcon={app}\I2Pd.exe |
|
||||||
Compression=lzma2 |
|
||||||
SolidCompression=yes |
|
||||||
OutputDir=. |
|
||||||
LicenseFile=.\..\LICENSE |
|
||||||
OutputBaseFilename=setup_{#I2Pd_AppName}_v{#I2Pd_ver} |
|
||||||
ArchitecturesInstallIn64BitMode=x64 |
|
||||||
|
|
||||||
|
|
||||||
[Files] |
|
||||||
Source: "x64\Release\i2pd.exe"; DestDir: "{app}"; DestName: "i2pd.exe"; Check: Is64BitInstallMode |
|
||||||
Source: "Release\i2pd.exe"; DestDir: "{app}"; Check: not Is64BitInstallMode |
|
||||||
Source: "..\README.md"; DestDir: "{app}"; DestName: "Readme.txt"; AfterInstall: ConvertLineEndings |
|
||||||
|
|
||||||
[Icons] |
|
||||||
Name: "{group}\I2Pd"; Filename: "{app}\i2pd.exe" |
|
||||||
Name: "{group}\Readme"; Filename: "{app}\Readme.txt" |
|
||||||
|
|
||||||
|
|
||||||
[Registry] |
|
||||||
Root: HKCU; Subkey: "Environment"; ValueName: "Path"; ValueType: "string"; ValueData: "{app};{olddata}"; Check: NotOnPathAlready(); Flags: preservestringtype; |
|
||||||
|
|
||||||
[Code] |
|
||||||
|
|
||||||
var |
|
||||||
DefaultTop, |
|
||||||
DefaultLeft, |
|
||||||
DefaultHeight, |
|
||||||
DefaultBackTop, |
|
||||||
DefaultNextTop, |
|
||||||
DefaultCancelTop, |
|
||||||
DefaultBevelTop, |
|
||||||
DefaultOuterHeight: Integer; |
|
||||||
|
|
||||||
const |
|
||||||
LicenseHeight = 400; |
|
||||||
LF = #10; |
|
||||||
CR = #13; |
|
||||||
CRLF = CR + LF; |
|
||||||
|
|
||||||
procedure ConvertLineEndings(); |
|
||||||
var |
|
||||||
FilePath : String; |
|
||||||
FileContents : String; |
|
||||||
begin |
|
||||||
FilePath := ExpandConstant(CurrentFileName) |
|
||||||
LoadStringFromFile(FilePath, FileContents); |
|
||||||
StringChangeEx(FileContents, LF, CRLF, False); |
|
||||||
SaveStringToFile(FilePath, FileContents, False); |
|
||||||
end; |
|
||||||
|
|
||||||
procedure InitializeWizard(); |
|
||||||
begin |
|
||||||
DefaultTop := WizardForm.Top; |
|
||||||
DefaultLeft := WizardForm.Left; |
|
||||||
DefaultHeight := WizardForm.Height; |
|
||||||
DefaultBackTop := WizardForm.BackButton.Top; |
|
||||||
DefaultNextTop := WizardForm.NextButton.Top; |
|
||||||
DefaultCancelTop := WizardForm.CancelButton.Top; |
|
||||||
DefaultBevelTop := WizardForm.Bevel.Top; |
|
||||||
DefaultOuterHeight := WizardForm.OuterNotebook.Height; |
|
||||||
|
|
||||||
WizardForm.InnerPage.Height := WizardForm.InnerPage.Height + (LicenseHeight - DefaultHeight); |
|
||||||
WizardForm.InnerNotebook.Height := WizardForm.InnerNotebook.Height + (LicenseHeight - DefaultHeight); |
|
||||||
WizardForm.LicensePage.Height := WizardForm.LicensePage.Height + (LicenseHeight - DefaultHeight); |
|
||||||
WizardForm.LicenseMemo.Height := WizardForm.LicenseMemo.Height + (LicenseHeight - DefaultHeight); |
|
||||||
WizardForm.LicenseNotAcceptedRadio.Top := WizardForm.LicenseNotAcceptedRadio.Top + (LicenseHeight - DefaultHeight); |
|
||||||
WizardForm.LicenseAcceptedRadio.Top := WizardForm.LicenseAcceptedRadio.Top + (LicenseHeight - DefaultHeight); |
|
||||||
|
|
||||||
end; |
|
||||||
|
|
||||||
procedure CurPageChanged(CurPageID: Integer); |
|
||||||
begin |
|
||||||
if CurPageID = wpLicense then |
|
||||||
begin |
|
||||||
WizardForm.Top := DefaultTop - (LicenseHeight - DefaultHeight) div 2; |
|
||||||
WizardForm.Height := LicenseHeight; |
|
||||||
WizardForm.OuterNotebook.Height := WizardForm.OuterNotebook.Height + (LicenseHeight - DefaultHeight); |
|
||||||
WizardForm.CancelButton.Top := DefaultCancelTop + (LicenseHeight - DefaultHeight); |
|
||||||
WizardForm.NextButton.Top := DefaultNextTop + (LicenseHeight - DefaultHeight); |
|
||||||
WizardForm.BackButton.Top := DefaultBackTop + (LicenseHeight - DefaultHeight); |
|
||||||
WizardForm.Bevel.Top := DefaultBevelTop + (LicenseHeight - DefaultHeight); |
|
||||||
end |
|
||||||
else |
|
||||||
begin |
|
||||||
WizardForm.Top := DefaultTop; |
|
||||||
WizardForm.Left := DefaultLeft; |
|
||||||
WizardForm.Height := DefaultHeight; |
|
||||||
WizardForm.OuterNotebook.Height := DefaultOuterHeight; |
|
||||||
WizardForm.CancelButton.Top := DefaultCancelTop; |
|
||||||
WizardForm.NextButton.Top := DefaultNextTop; |
|
||||||
WizardForm.BackButton.Top := DefaultBackTop; |
|
||||||
WizardForm.Bevel.Top := DefaultBevelTop; |
|
||||||
end; |
|
||||||
end; |
|
||||||
|
|
||||||
function NotOnPathAlready(): Boolean; |
|
||||||
var |
|
||||||
BinDir, Path: String; |
|
||||||
begin |
|
||||||
Log('Checking if i2pd dir is already in the %PATH%'); |
|
||||||
if RegQueryStringValue(HKEY_CURRENT_USER, 'Environment', 'Path', Path) then |
|
||||||
begin // Successfully read the value |
|
||||||
Log('HKCUEnvironmentPATH = ' + Path); |
|
||||||
BinDir := ExpandConstant('{app}'); |
|
||||||
Log('Looking for i2pd dir in %PATH%: ' + BinDir + ' in ' + Path); |
|
||||||
if Pos(LowerCase(BinDir), Lowercase(Path)) = 0 then |
|
||||||
begin |
|
||||||
Log('Did not find i2pd dir in %PATH% so I will add it'); |
|
||||||
Result := True; |
|
||||||
end |
|
||||||
else |
|
||||||
begin |
|
||||||
Log('Found i2pd dir in %PATH% so will not add it again'); |
|
||||||
Result := False; |
|
||||||
end |
|
||||||
end |
|
||||||
else // The key probably doesn't exist |
|
||||||
begin |
|
||||||
Log('Could not access HKCUEnvironmentPATH so I assume that it is OK to add it'); |
|
||||||
Result := True; |
|
||||||
end; |
|
||||||
end; |
|
||||||
|
|
||||||
|
|
||||||
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); |
|
||||||
var |
|
||||||
BinDir, Path: String; |
|
||||||
begin |
|
||||||
if (CurUninstallStep = usPostUninstall) |
|
||||||
and (RegQueryStringValue(HKEY_CURRENT_USER, 'Environment', 'PATH', Path)) then |
|
||||||
begin |
|
||||||
BinDir := ExpandConstant('{app}'); |
|
||||||
if Pos(LowerCase(BinDir) + ';', Lowercase(Path)) <> 0 then |
|
||||||
begin |
|
||||||
StringChange(Path, BinDir + ';', ''); |
|
||||||
RegWriteStringValue(HKEY_CURRENT_USER, 'Environment', 'PATH', Path); |
|
||||||
end; |
|
||||||
end; |
|
||||||
end; |
|
@ -1,57 +0,0 @@ |
|||||||
!verbose push |
|
||||||
!verbose 3 |
|
||||||
|
|
||||||
!ifndef _MUI_EXTRAPAGES_NSH |
|
||||||
!define _MUI_EXTRAPAGES_NSH |
|
||||||
|
|
||||||
!ifmacrondef MUI_EXTRAPAGE_README & MUI_PAGE_README & MUI_UNPAGE_README & ReadmeLangStrings |
|
||||||
|
|
||||||
!macro MUI_EXTRAPAGE_README UN ReadmeFile |
|
||||||
!verbose push |
|
||||||
!verbose 3 |
|
||||||
!define MUI_PAGE_HEADER_TEXT "$(${UN}ReadmeHeader)" |
|
||||||
!define MUI_PAGE_HEADER_SUBTEXT "$(${UN}ReadmeSubHeader)" |
|
||||||
!define MUI_LICENSEPAGE_TEXT_TOP "$(${UN}ReadmeTextTop)" |
|
||||||
!define MUI_LICENSEPAGE_TEXT_BOTTOM "$(${UN}ReadmeTextBottom)" |
|
||||||
!define MUI_LICENSEPAGE_BUTTON "$(^NextBtn)" |
|
||||||
!insertmacro MUI_${UN}PAGE_LICENSE "${ReadmeFile}" |
|
||||||
!verbose pop |
|
||||||
!macroend |
|
||||||
|
|
||||||
!define ReadmeRun "!insertmacro MUI_EXTRAPAGE_README" |
|
||||||
|
|
||||||
|
|
||||||
!macro MUI_PAGE_README ReadmeFile |
|
||||||
!verbose push |
|
||||||
!verbose 3 |
|
||||||
${ReadmeRun} "" "${ReadmeFile}" |
|
||||||
!verbose pop |
|
||||||
!macroend |
|
||||||
|
|
||||||
|
|
||||||
!macro MUI_UNPAGE_README ReadmeFile |
|
||||||
!verbose push |
|
||||||
!verbose 3 |
|
||||||
${ReadmeRun} "UN" "${ReadmeFile}" |
|
||||||
!verbose pop |
|
||||||
!macroend |
|
||||||
|
|
||||||
|
|
||||||
!macro ReadmeLangStrings UN MUI_LANG ReadmeHeader ReadmeSubHeader ReadmeTextTop ReadmeTextBottom |
|
||||||
!verbose push |
|
||||||
!verbose 3 |
|
||||||
LangString ${UN}ReadmeHeader ${MUI_LANG} "${ReadmeHeader}" |
|
||||||
LangString ${UN}ReadmeSubHeader ${MUI_LANG} "${ReadmeSubHeader}" |
|
||||||
LangString ${UN}ReadmeTextTop ${MUI_LANG} "${ReadmeTextTop}" |
|
||||||
LangString ${UN}ReadmeTextBottom ${MUI_LANG} "${ReadmeTextBottom}" |
|
||||||
!verbose pop |
|
||||||
!macroend |
|
||||||
|
|
||||||
!define ReadmeLanguage `!insertmacro ReadmeLangStrings ""` |
|
||||||
|
|
||||||
!define Un.ReadmeLanguage `!insertmacro ReadmeLangStrings "UN"` |
|
||||||
|
|
||||||
!endif |
|
||||||
!endif |
|
||||||
|
|
||||||
!verbose pop |
|
@ -1,419 +0,0 @@ |
|||||||
; NSIS SERVICE LIBRARY - servicelib.nsh |
|
||||||
; Version 1.8.1 - Jun 21th, 2013 |
|
||||||
; Questions/Comments - dselkirk@hotmail.com |
|
||||||
; |
|
||||||
; Description: |
|
||||||
; Provides an interface to window services |
|
||||||
; |
|
||||||
; Inputs: |
|
||||||
; action - systemlib action ie. create, delete, start, stop, pause, |
|
||||||
; continue, installed, running, status |
|
||||||
; name - name of service to manipulate |
|
||||||
; param - action parameters; usage: var1=value1;var2=value2;...etc. |
|
||||||
; (don't forget to add a ';' after the last value!) |
|
||||||
; |
|
||||||
; Actions: |
|
||||||
; create - creates a new windows service |
|
||||||
; Parameters: |
|
||||||
; path - path to service executable |
|
||||||
; autostart - automatically start with system ie. 1|0 |
|
||||||
; interact - interact with the desktop ie. 1|0 |
|
||||||
; depend - service dependencies |
|
||||||
; user - user that runs the service |
|
||||||
; password - password of the above user |
|
||||||
; display - display name in service's console |
|
||||||
; description - Description of service |
|
||||||
; starttype - start type (supersedes autostart) |
|
||||||
; servicetype - service type (supersedes interact) |
|
||||||
; |
|
||||||
; delete - deletes a windows service |
|
||||||
; start - start a stopped windows service |
|
||||||
; stop - stops a running windows service |
|
||||||
; pause - pauses a running windows service |
|
||||||
; continue - continues a paused windows service |
|
||||||
; installed - is the provided service installed |
|
||||||
; Parameters: |
|
||||||
; action - if true then invokes the specified action |
|
||||||
; running - is the provided service running |
|
||||||
; Parameters: |
|
||||||
; action - if true then invokes the specified action |
|
||||||
; status - check the status of the provided service |
|
||||||
; |
|
||||||
; Usage: |
|
||||||
; Method 1: |
|
||||||
; Push "action" |
|
||||||
; Push "name" |
|
||||||
; Push "param" |
|
||||||
; Call Service |
|
||||||
; Pop $0 ;response |
|
||||||
; |
|
||||||
; Method 2: |
|
||||||
; !insertmacro SERVICE "action" "name" "param" |
|
||||||
; |
|
||||||
; History: |
|
||||||
; 1.0 - 09/15/2003 - Initial release |
|
||||||
; 1.1 - 09/16/2003 - Changed &l to i, thx brainsucker |
|
||||||
; 1.2 - 02/29/2004 - Fixed documentation. |
|
||||||
; 1.3 - 01/05/2006 - Fixed interactive flag and pop order (Kichik) |
|
||||||
; 1.4 - 12/07/2006 - Added display and depend, fixed datatypes (Vitoco) |
|
||||||
; 1.5 - 06/25/2008 - Added description of service.(DeSafe.com/liuqixing#gmail.com) |
|
||||||
; 1.5.1 - 06/12/2009 - Added use of __UNINSTALL__ |
|
||||||
; 1.6 - 08/02/2010 - Fixed description implementation (Anders) |
|
||||||
; 1.7 - 04/11/2010 - Added get running service process id (Nico) |
|
||||||
; 1.8 - 24/03/2011 - Added starttype and servicetype (Sergius) |
|
||||||
; 1.8.1 - 21/06/2013 - Added dynamic ASCII & Unicode support (Zinthose) |
|
||||||
|
|
||||||
!ifndef SERVICELIB |
|
||||||
!define SERVICELIB |
|
||||||
|
|
||||||
!define SC_MANAGER_ALL_ACCESS 0x3F |
|
||||||
!define SC_STATUS_PROCESS_INFO 0x0 |
|
||||||
!define SERVICE_ALL_ACCESS 0xF01FF |
|
||||||
|
|
||||||
!define SERVICE_CONTROL_STOP 1 |
|
||||||
!define SERVICE_CONTROL_PAUSE 2 |
|
||||||
!define SERVICE_CONTROL_CONTINUE 3 |
|
||||||
|
|
||||||
!define SERVICE_STOPPED 0x1 |
|
||||||
!define SERVICE_START_PENDING 0x2 |
|
||||||
!define SERVICE_STOP_PENDING 0x3 |
|
||||||
!define SERVICE_RUNNING 0x4 |
|
||||||
!define SERVICE_CONTINUE_PENDING 0x5 |
|
||||||
!define SERVICE_PAUSE_PENDING 0x6 |
|
||||||
!define SERVICE_PAUSED 0x7 |
|
||||||
|
|
||||||
!define SERVICE_KERNEL_DRIVER 0x00000001 |
|
||||||
!define SERVICE_FILE_SYSTEM_DRIVER 0x00000002 |
|
||||||
!define SERVICE_WIN32_OWN_PROCESS 0x00000010 |
|
||||||
!define SERVICE_WIN32_SHARE_PROCESS 0x00000020 |
|
||||||
!define SERVICE_INTERACTIVE_PROCESS 0x00000100 |
|
||||||
|
|
||||||
|
|
||||||
!define SERVICE_BOOT_START 0x00000000 |
|
||||||
!define SERVICE_SYSTEM_START 0x00000001 |
|
||||||
!define SERVICE_AUTO_START 0x00000002 |
|
||||||
!define SERVICE_DEMAND_START 0x00000003 |
|
||||||
!define SERVICE_DISABLED 0x00000004 |
|
||||||
|
|
||||||
## Added by Zinthose for Native Unicode Support |
|
||||||
!ifdef NSIS_UNICODE |
|
||||||
!define APITAG "W" |
|
||||||
!else |
|
||||||
!define APITAG "A" |
|
||||||
!endif |
|
||||||
|
|
||||||
!macro SERVICE ACTION NAME PARAM |
|
||||||
Push '${ACTION}' |
|
||||||
Push '${NAME}' |
|
||||||
Push '${PARAM}' |
|
||||||
!ifdef __UNINSTALL__ |
|
||||||
Call un.Service |
|
||||||
!else |
|
||||||
Call Service |
|
||||||
!endif |
|
||||||
!macroend |
|
||||||
|
|
||||||
!macro FUNC_GETPARAM |
|
||||||
Push $0 |
|
||||||
Push $1 |
|
||||||
Push $2 |
|
||||||
Push $3 |
|
||||||
Push $4 |
|
||||||
Push $5 |
|
||||||
Push $6 |
|
||||||
Push $7 |
|
||||||
Exch 8 |
|
||||||
Pop $1 ;name |
|
||||||
Exch 8 |
|
||||||
Pop $2 ;source |
|
||||||
StrCpy $0 "" |
|
||||||
StrLen $7 $2 |
|
||||||
StrCpy $3 0 |
|
||||||
lbl_loop: |
|
||||||
IntCmp $3 $7 0 0 lbl_done |
|
||||||
StrLen $4 "$1=" |
|
||||||
StrCpy $5 $2 $4 $3 |
|
||||||
StrCmp $5 "$1=" 0 lbl_next |
|
||||||
IntOp $5 $3 + $4 |
|
||||||
StrCpy $3 $5 |
|
||||||
lbl_loop2: |
|
||||||
IntCmp $3 $7 0 0 lbl_done |
|
||||||
StrCpy $6 $2 1 $3 |
|
||||||
StrCmp $6 ";" 0 lbl_next2 |
|
||||||
IntOp $6 $3 - $5 |
|
||||||
StrCpy $0 $2 $6 $5 |
|
||||||
Goto lbl_done |
|
||||||
lbl_next2: |
|
||||||
IntOp $3 $3 + 1 |
|
||||||
Goto lbl_loop2 |
|
||||||
lbl_next: |
|
||||||
IntOp $3 $3 + 1 |
|
||||||
Goto lbl_loop |
|
||||||
lbl_done: |
|
||||||
Pop $5 |
|
||||||
Pop $4 |
|
||||||
Pop $3 |
|
||||||
Pop $2 |
|
||||||
Pop $1 |
|
||||||
Exch 2 |
|
||||||
Pop $6 |
|
||||||
Pop $7 |
|
||||||
Exch $0 |
|
||||||
!macroend |
|
||||||
|
|
||||||
!macro CALL_GETPARAM VAR NAME DEFAULT LABEL |
|
||||||
Push $1 |
|
||||||
Push ${NAME} |
|
||||||
Call ${UN}GETPARAM |
|
||||||
Pop $6 |
|
||||||
StrCpy ${VAR} "${DEFAULT}" |
|
||||||
StrCmp $6 "" "${LABEL}" 0 |
|
||||||
StrCpy ${VAR} $6 |
|
||||||
!macroend |
|
||||||
|
|
||||||
!macro FUNC_SERVICE UN |
|
||||||
Push $0 |
|
||||||
Push $1 |
|
||||||
Push $2 |
|
||||||
Push $3 |
|
||||||
Push $4 |
|
||||||
Push $5 |
|
||||||
Push $6 |
|
||||||
Push $7 |
|
||||||
Exch 8 |
|
||||||
Pop $1 ;param |
|
||||||
Exch 8 |
|
||||||
Pop $2 ;name |
|
||||||
Exch 8 |
|
||||||
Pop $3 ;action |
|
||||||
;$0 return |
|
||||||
;$4 OpenSCManager |
|
||||||
;$5 OpenService |
|
||||||
|
|
||||||
StrCpy $0 "false" |
|
||||||
System::Call 'advapi32::OpenSCManager${APITAG}(n, n, i ${SC_MANAGER_ALL_ACCESS}) i.r4' |
|
||||||
IntCmp $4 0 lbl_done |
|
||||||
StrCmp $3 "create" lbl_create |
|
||||||
System::Call 'advapi32::OpenService${APITAG}(i r4, t r2, i ${SERVICE_ALL_ACCESS}) i.r5' |
|
||||||
IntCmp $5 0 lbl_done |
|
||||||
|
|
||||||
lbl_select: |
|
||||||
StrCmp $3 "delete" lbl_delete |
|
||||||
StrCmp $3 "start" lbl_start |
|
||||||
StrCmp $3 "stop" lbl_stop |
|
||||||
StrCmp $3 "pause" lbl_pause |
|
||||||
StrCmp $3 "continue" lbl_continue |
|
||||||
StrCmp $3 "installed" lbl_installed |
|
||||||
StrCmp $3 "running" lbl_running |
|
||||||
StrCmp $3 "status" lbl_status |
|
||||||
StrCmp $3 "processid" lbl_processid |
|
||||||
Goto lbl_done |
|
||||||
|
|
||||||
; create service |
|
||||||
lbl_create: |
|
||||||
Push $R1 ;depend |
|
||||||
Push $R2 ;user |
|
||||||
Push $R3 ;password |
|
||||||
Push $R4 ;servicetype/interact |
|
||||||
Push $R5 ;starttype/autostart |
|
||||||
Push $R6 ;path |
|
||||||
Push $R7 ;display |
|
||||||
Push $R8 ;description |
|
||||||
|
|
||||||
!insertmacro CALL_GETPARAM $R1 "depend" "n" "lbl_depend" |
|
||||||
StrCpy $R1 't "$R1"' |
|
||||||
lbl_depend: |
|
||||||
StrCmp $R1 "n" 0 lbl_machine ;old name of depend param |
|
||||||
!insertmacro CALL_GETPARAM $R1 "machine" "n" "lbl_machine" |
|
||||||
StrCpy $R1 't "$R1"' |
|
||||||
lbl_machine: |
|
||||||
|
|
||||||
!insertmacro CALL_GETPARAM $R2 "user" "n" "lbl_user" |
|
||||||
StrCpy $R2 't "$R2"' |
|
||||||
lbl_user: |
|
||||||
|
|
||||||
!insertmacro CALL_GETPARAM $R3 "password" "n" "lbl_password" |
|
||||||
StrCpy $R3 't "$R3"' |
|
||||||
lbl_password: |
|
||||||
|
|
||||||
!insertmacro CALL_GETPARAM $R4 "interact" "${SERVICE_WIN32_OWN_PROCESS}" "lbl_interact" |
|
||||||
StrCpy $6 ${SERVICE_WIN32_OWN_PROCESS} |
|
||||||
IntCmp $R4 0 +2 |
|
||||||
IntOp $6 $6 | ${SERVICE_INTERACTIVE_PROCESS} |
|
||||||
StrCpy $R4 $6 |
|
||||||
lbl_interact: |
|
||||||
|
|
||||||
!insertmacro CALL_GETPARAM $R4 "servicetype" "$R4" "lbl_servicetype" |
|
||||||
lbl_servicetype: |
|
||||||
|
|
||||||
!insertmacro CALL_GETPARAM $R5 "autostart" "${SERVICE_DEMAND_START}" "lbl_autostart" |
|
||||||
StrCpy $6 ${SERVICE_DEMAND_START} |
|
||||||
IntCmp $R5 0 +2 |
|
||||||
StrCpy $6 ${SERVICE_AUTO_START} |
|
||||||
StrCpy $R5 $6 |
|
||||||
lbl_autostart: |
|
||||||
|
|
||||||
!insertmacro CALL_GETPARAM $R5 "starttype" "$R5" "lbl_starttype" |
|
||||||
lbl_starttype: |
|
||||||
|
|
||||||
!insertmacro CALL_GETPARAM $R6 "path" "n" "lbl_path" |
|
||||||
lbl_path: |
|
||||||
|
|
||||||
!insertmacro CALL_GETPARAM $R7 "display" "$2" "lbl_display" |
|
||||||
lbl_display: |
|
||||||
|
|
||||||
!insertmacro CALL_GETPARAM $R8 "description" "$2" "lbl_description" |
|
||||||
lbl_description: |
|
||||||
|
|
||||||
System::Call 'advapi32::CreateService${APITAG}(i r4, t r2, t R7, i ${SERVICE_ALL_ACCESS}, \ |
|
||||||
i R4, i R5, i 0, t R6, n, n, $R1, $R2, $R3) i.r6' |
|
||||||
|
|
||||||
; write description of service (SERVICE_CONFIG_DESCRIPTION) |
|
||||||
System::Call 'advapi32::ChangeServiceConfig2${APITAG}(ir6,i1,*t "$R8")i.R7' |
|
||||||
strcmp $R7 "error" 0 lbl_descriptioncomplete |
|
||||||
WriteRegStr HKLM "SYSTEM\CurrentControlSet\Services\$2" "Description" $R8 |
|
||||||
lbl_descriptioncomplete: |
|
||||||
|
|
||||||
Pop $R8 |
|
||||||
Pop $R7 |
|
||||||
Pop $R6 |
|
||||||
Pop $R5 |
|
||||||
Pop $R4 |
|
||||||
Pop $R3 |
|
||||||
Pop $R2 |
|
||||||
Pop $R1 |
|
||||||
StrCmp $6 0 lbl_done lbl_good |
|
||||||
|
|
||||||
; delete service |
|
||||||
lbl_delete: |
|
||||||
System::Call 'advapi32::DeleteService(i r5) i.r6' |
|
||||||
StrCmp $6 0 lbl_done lbl_good |
|
||||||
|
|
||||||
; start service |
|
||||||
lbl_start: |
|
||||||
System::Call 'advapi32::StartService${APITAG}(i r5, i 0, i 0) i.r6' |
|
||||||
StrCmp $6 0 lbl_done lbl_good |
|
||||||
|
|
||||||
; stop service |
|
||||||
lbl_stop: |
|
||||||
Push $R1 |
|
||||||
System::Call '*(i,i,i,i,i,i,i) i.R1' |
|
||||||
System::Call 'advapi32::ControlService(i r5, i ${SERVICE_CONTROL_STOP}, i $R1) i' |
|
||||||
System::Free $R1 |
|
||||||
Pop $R1 |
|
||||||
StrCmp $6 0 lbl_done lbl_good |
|
||||||
|
|
||||||
; pause service |
|
||||||
lbl_pause: |
|
||||||
Push $R1 |
|
||||||
System::Call '*(i,i,i,i,i,i,i) i.R1' |
|
||||||
System::Call 'advapi32::ControlService(i r5, i ${SERVICE_CONTROL_PAUSE}, i $R1) i' |
|
||||||
System::Free $R1 |
|
||||||
Pop $R1 |
|
||||||
StrCmp $6 0 lbl_done lbl_good |
|
||||||
|
|
||||||
; continue service |
|
||||||
lbl_continue: |
|
||||||
Push $R1 |
|
||||||
System::Call '*(i,i,i,i,i,i,i) i.R1' |
|
||||||
System::Call 'advapi32::ControlService(i r5, i ${SERVICE_CONTROL_CONTINUE}, i $R1) i' |
|
||||||
System::Free $R1 |
|
||||||
Pop $R1 |
|
||||||
StrCmp $6 0 lbl_done lbl_good |
|
||||||
|
|
||||||
; is installed |
|
||||||
lbl_installed: |
|
||||||
!insertmacro CALL_GETPARAM $7 "action" "" "lbl_good" |
|
||||||
StrCpy $3 $7 |
|
||||||
Goto lbl_select |
|
||||||
|
|
||||||
; is service running |
|
||||||
lbl_running: |
|
||||||
Push $R1 |
|
||||||
System::Call '*(i,i,i,i,i,i,i) i.R1' |
|
||||||
System::Call 'advapi32::QueryServiceStatus(i r5, i $R1) i' |
|
||||||
System::Call '*$R1(i, i.r6)' |
|
||||||
System::Free $R1 |
|
||||||
Pop $R1 |
|
||||||
IntFmt $6 "0x%X" $6 |
|
||||||
StrCmp $6 ${SERVICE_RUNNING} 0 lbl_done |
|
||||||
!insertmacro CALL_GETPARAM $7 "action" "" "lbl_good" |
|
||||||
StrCpy $3 $7 |
|
||||||
Goto lbl_select |
|
||||||
|
|
||||||
lbl_status: |
|
||||||
Push $R1 |
|
||||||
System::Call '*(i,i,i,i,i,i,i) i.R1' |
|
||||||
System::Call 'advapi32::QueryServiceStatus(i r5, i $R1) i' |
|
||||||
System::Call '*$R1(i, i .r6)' |
|
||||||
System::Free $R1 |
|
||||||
Pop $R1 |
|
||||||
IntFmt $6 "0x%X" $6 |
|
||||||
StrCpy $0 "running" |
|
||||||
IntCmp $6 ${SERVICE_RUNNING} lbl_done |
|
||||||
StrCpy $0 "stopped" |
|
||||||
IntCmp $6 ${SERVICE_STOPPED} lbl_done |
|
||||||
StrCpy $0 "start_pending" |
|
||||||
IntCmp $6 ${SERVICE_START_PENDING} lbl_done |
|
||||||
StrCpy $0 "stop_pending" |
|
||||||
IntCmp $6 ${SERVICE_STOP_PENDING} lbl_done |
|
||||||
StrCpy $0 "running" |
|
||||||
IntCmp $6 ${SERVICE_RUNNING} lbl_done |
|
||||||
StrCpy $0 "continue_pending" |
|
||||||
IntCmp $6 ${SERVICE_CONTINUE_PENDING} lbl_done |
|
||||||
StrCpy $0 "pause_pending" |
|
||||||
IntCmp $6 ${SERVICE_PAUSE_PENDING} lbl_done |
|
||||||
StrCpy $0 "paused" |
|
||||||
IntCmp $6 ${SERVICE_PAUSED} lbl_done |
|
||||||
StrCpy $0 "unknown" |
|
||||||
Goto lbl_done |
|
||||||
|
|
||||||
lbl_processid: |
|
||||||
Push $R1 |
|
||||||
Push $R2 |
|
||||||
System::Call '*(i,i,i,i,i,i,i,i,i) i.R1' |
|
||||||
System::Call '*(i 0) i.R2' |
|
||||||
System::Call "advapi32::QueryServiceStatusEx(i r5, i ${SC_STATUS_PROCESS_INFO}, i $R1, i 36, i $R2) i" |
|
||||||
System::Call "*$R1(i,i,i,i,i,i,i, i .r0)" |
|
||||||
System::Free $R2 |
|
||||||
System::Free $R1 |
|
||||||
Pop $R2 |
|
||||||
Pop $R1 |
|
||||||
Goto lbl_done |
|
||||||
|
|
||||||
lbl_good: |
|
||||||
StrCpy $0 "true" |
|
||||||
lbl_done: |
|
||||||
IntCmp $5 0 +2 |
|
||||||
System::Call 'advapi32::CloseServiceHandle(i r5) n' |
|
||||||
IntCmp $4 0 +2 |
|
||||||
System::Call 'advapi32::CloseServiceHandle(i r4) n' |
|
||||||
Pop $4 |
|
||||||
Pop $3 |
|
||||||
Pop $2 |
|
||||||
Pop $1 |
|
||||||
Exch 3 |
|
||||||
Pop $5 |
|
||||||
Pop $7 |
|
||||||
Pop $6 |
|
||||||
Exch $0 |
|
||||||
!macroend |
|
||||||
|
|
||||||
Function Service |
|
||||||
!insertmacro FUNC_SERVICE "" |
|
||||||
FunctionEnd |
|
||||||
|
|
||||||
Function un.Service |
|
||||||
!insertmacro FUNC_SERVICE "un." |
|
||||||
FunctionEnd |
|
||||||
|
|
||||||
Function GetParam |
|
||||||
!insertmacro FUNC_GETPARAM |
|
||||||
FunctionEnd |
|
||||||
|
|
||||||
Function un.GetParam |
|
||||||
!insertmacro FUNC_GETPARAM |
|
||||||
FunctionEnd |
|
||||||
|
|
||||||
!undef APITAG |
|
||||||
!endif |
|
@ -1,16 +1,11 @@ |
|||||||
//{{NO_DEPENDENCIES}}
|
//{{NO_DEPENDENCIES}}
|
||||||
// Microsoft Visual C++ generated include file.
|
#define MAINICON 101 |
||||||
// Used by Resource.rc
|
|
||||||
//
|
|
||||||
#define MAINICON 101 |
|
||||||
|
|
||||||
// Next default values for new objects
|
|
||||||
//
|
|
||||||
#ifdef APSTUDIO_INVOKED |
#ifdef APSTUDIO_INVOKED |
||||||
#ifndef APSTUDIO_READONLY_SYMBOLS |
#ifndef APSTUDIO_READONLY_SYMBOLS |
||||||
#define _APS_NEXT_RESOURCE_VALUE 102 |
#define _APS_NEXT_RESOURCE_VALUE 102 |
||||||
#define _APS_NEXT_COMMAND_VALUE 40001 |
#define _APS_NEXT_COMMAND_VALUE 40001 |
||||||
#define _APS_NEXT_CONTROL_VALUE 1001 |
#define _APS_NEXT_CONTROL_VALUE 1001 |
||||||
#define _APS_NEXT_SYMED_VALUE 101 |
#define _APS_NEXT_SYMED_VALUE 101 |
||||||
#endif |
#endif |
||||||
#endif |
#endif |
||||||
|
@ -1,978 +0,0 @@ |
|||||||
; CPack install script designed for a nmake build |
|
||||||
|
|
||||||
;-------------------------------- |
|
||||||
; You must define these values |
|
||||||
|
|
||||||
!define VERSION "@CPACK_PACKAGE_VERSION@" |
|
||||||
!define PATCH "@CPACK_PACKAGE_VERSION_PATCH@" |
|
||||||
!define INST_DIR "@CPACK_TEMPORARY_DIRECTORY@" |
|
||||||
|
|
||||||
;-------------------------------- |
|
||||||
;Variables |
|
||||||
|
|
||||||
Var MUI_TEMP |
|
||||||
Var STARTMENU_FOLDER |
|
||||||
Var SV_ALLUSERS |
|
||||||
Var START_MENU |
|
||||||
Var DO_NOT_ADD_TO_PATH |
|
||||||
Var ADD_TO_PATH_ALL_USERS |
|
||||||
Var ADD_TO_PATH_CURRENT_USER |
|
||||||
Var INSTALL_DESKTOP |
|
||||||
Var IS_DEFAULT_INSTALLDIR |
|
||||||
;-------------------------------- |
|
||||||
;Include Modern UI |
|
||||||
|
|
||||||
!include "MUI.nsh" |
|
||||||
|
|
||||||
;Default installation folder |
|
||||||
InstallDir "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" |
|
||||||
|
|
||||||
;-------------------------------- |
|
||||||
;General |
|
||||||
|
|
||||||
;Name and file |
|
||||||
Name "@CPACK_NSIS_PACKAGE_NAME@" |
|
||||||
OutFile "@CPACK_TOPLEVEL_DIRECTORY@/@CPACK_OUTPUT_FILE_NAME@" |
|
||||||
|
|
||||||
;Set compression |
|
||||||
SetCompressor @CPACK_NSIS_COMPRESSOR@ |
|
||||||
|
|
||||||
;Require administrator access |
|
||||||
RequestExecutionLevel admin |
|
||||||
|
|
||||||
@CPACK_NSIS_DEFINES@ |
|
||||||
|
|
||||||
!include Sections.nsh |
|
||||||
|
|
||||||
;--- Component support macros: --- |
|
||||||
; The code for the add/remove functionality is from: |
|
||||||
; http://nsis.sourceforge.net/Add/Remove_Functionality |
|
||||||
; It has been modified slightly and extended to provide |
|
||||||
; inter-component dependencies. |
|
||||||
Var AR_SecFlags |
|
||||||
Var AR_RegFlags |
|
||||||
@CPACK_NSIS_SECTION_SELECTED_VARS@ |
|
||||||
|
|
||||||
; Loads the "selected" flag for the section named SecName into the |
|
||||||
; variable VarName. |
|
||||||
!macro LoadSectionSelectedIntoVar SecName VarName |
|
||||||
SectionGetFlags ${${SecName}} $${VarName} |
|
||||||
IntOp $${VarName} $${VarName} & ${SF_SELECTED} ;Turn off all other bits |
|
||||||
!macroend |
|
||||||
|
|
||||||
; Loads the value of a variable... can we get around this? |
|
||||||
!macro LoadVar VarName |
|
||||||
IntOp $R0 0 + $${VarName} |
|
||||||
!macroend |
|
||||||
|
|
||||||
; Sets the value of a variable |
|
||||||
!macro StoreVar VarName IntValue |
|
||||||
IntOp $${VarName} 0 + ${IntValue} |
|
||||||
!macroend |
|
||||||
|
|
||||||
!macro InitSection SecName |
|
||||||
; This macro reads component installed flag from the registry and |
|
||||||
;changes checked state of the section on the components page. |
|
||||||
;Input: section index constant name specified in Section command. |
|
||||||
|
|
||||||
ClearErrors |
|
||||||
;Reading component status from registry |
|
||||||
ReadRegDWORD $AR_RegFlags HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" "Installed" |
|
||||||
IfErrors "default_${SecName}" |
|
||||||
;Status will stay default if registry value not found |
|
||||||
;(component was never installed) |
|
||||||
IntOp $AR_RegFlags $AR_RegFlags & ${SF_SELECTED} ;Turn off all other bits |
|
||||||
SectionGetFlags ${${SecName}} $AR_SecFlags ;Reading default section flags |
|
||||||
IntOp $AR_SecFlags $AR_SecFlags & 0xFFFE ;Turn lowest (enabled) bit off |
|
||||||
IntOp $AR_SecFlags $AR_RegFlags | $AR_SecFlags ;Change lowest bit |
|
||||||
|
|
||||||
; Note whether this component was installed before |
|
||||||
!insertmacro StoreVar ${SecName}_was_installed $AR_RegFlags |
|
||||||
IntOp $R0 $AR_RegFlags & $AR_RegFlags |
|
||||||
|
|
||||||
;Writing modified flags |
|
||||||
SectionSetFlags ${${SecName}} $AR_SecFlags |
|
||||||
|
|
||||||
"default_${SecName}:" |
|
||||||
!insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected |
|
||||||
!macroend |
|
||||||
|
|
||||||
!macro FinishSection SecName |
|
||||||
; This macro reads section flag set by user and removes the section |
|
||||||
;if it is not selected. |
|
||||||
;Then it writes component installed flag to registry |
|
||||||
;Input: section index constant name specified in Section command. |
|
||||||
|
|
||||||
SectionGetFlags ${${SecName}} $AR_SecFlags ;Reading section flags |
|
||||||
;Checking lowest bit: |
|
||||||
IntOp $AR_SecFlags $AR_SecFlags & ${SF_SELECTED} |
|
||||||
IntCmp $AR_SecFlags 1 "leave_${SecName}" |
|
||||||
;Section is not selected: |
|
||||||
;Calling Section uninstall macro and writing zero installed flag |
|
||||||
!insertmacro "Remove_${${SecName}}" |
|
||||||
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \ |
|
||||||
"Installed" 0 |
|
||||||
Goto "exit_${SecName}" |
|
||||||
|
|
||||||
"leave_${SecName}:" |
|
||||||
;Section is selected: |
|
||||||
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \ |
|
||||||
"Installed" 1 |
|
||||||
|
|
||||||
"exit_${SecName}:" |
|
||||||
!macroend |
|
||||||
|
|
||||||
!macro RemoveSection_CPack SecName |
|
||||||
; This macro is used to call section's Remove_... macro |
|
||||||
;from the uninstaller. |
|
||||||
;Input: section index constant name specified in Section command. |
|
||||||
|
|
||||||
!insertmacro "Remove_${${SecName}}" |
|
||||||
!macroend |
|
||||||
|
|
||||||
; Determine whether the selection of SecName changed |
|
||||||
!macro MaybeSelectionChanged SecName |
|
||||||
!insertmacro LoadVar ${SecName}_selected |
|
||||||
SectionGetFlags ${${SecName}} $R1 |
|
||||||
IntOp $R1 $R1 & ${SF_SELECTED} ;Turn off all other bits |
|
||||||
|
|
||||||
; See if the status has changed: |
|
||||||
IntCmp $R0 $R1 "${SecName}_unchanged" |
|
||||||
!insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected |
|
||||||
|
|
||||||
IntCmp $R1 ${SF_SELECTED} "${SecName}_was_selected" |
|
||||||
!insertmacro "Deselect_required_by_${SecName}" |
|
||||||
goto "${SecName}_unchanged" |
|
||||||
|
|
||||||
"${SecName}_was_selected:" |
|
||||||
!insertmacro "Select_${SecName}_depends" |
|
||||||
|
|
||||||
"${SecName}_unchanged:" |
|
||||||
!macroend |
|
||||||
;--- End of Add/Remove macros --- |
|
||||||
|
|
||||||
;-------------------------------- |
|
||||||
;Interface Settings |
|
||||||
|
|
||||||
!define MUI_HEADERIMAGE |
|
||||||
!define MUI_ABORTWARNING |
|
||||||
|
|
||||||
;-------------------------------- |
|
||||||
; path functions |
|
||||||
|
|
||||||
!verbose 3 |
|
||||||
!include "WinMessages.NSH" |
|
||||||
!verbose 4 |
|
||||||
|
|
||||||
;---------------------------------------- |
|
||||||
; based upon a script of "Written by KiCHiK 2003-01-18 05:57:02" |
|
||||||
;---------------------------------------- |
|
||||||
!verbose 3 |
|
||||||
!include "WinMessages.NSH" |
|
||||||
!verbose 4 |
|
||||||
;==================================================== |
|
||||||
; get_NT_environment |
|
||||||
; Returns: the selected environment |
|
||||||
; Output : head of the stack |
|
||||||
;==================================================== |
|
||||||
!macro select_NT_profile UN |
|
||||||
Function ${UN}select_NT_profile |
|
||||||
StrCmp $ADD_TO_PATH_ALL_USERS "1" 0 environment_single |
|
||||||
DetailPrint "Selected environment for all users" |
|
||||||
Push "all" |
|
||||||
Return |
|
||||||
environment_single: |
|
||||||
DetailPrint "Selected environment for current user only." |
|
||||||
Push "current" |
|
||||||
Return |
|
||||||
FunctionEnd |
|
||||||
!macroend |
|
||||||
!insertmacro select_NT_profile "" |
|
||||||
!insertmacro select_NT_profile "un." |
|
||||||
;---------------------------------------------------- |
|
||||||
!define NT_current_env 'HKCU "Environment"' |
|
||||||
!define NT_all_env 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' |
|
||||||
|
|
||||||
!ifndef WriteEnvStr_RegKey |
|
||||||
!ifdef ALL_USERS |
|
||||||
!define WriteEnvStr_RegKey \ |
|
||||||
'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' |
|
||||||
!else |
|
||||||
!define WriteEnvStr_RegKey 'HKCU "Environment"' |
|
||||||
!endif |
|
||||||
!endif |
|
||||||
|
|
||||||
; AddToPath - Adds the given dir to the search path. |
|
||||||
; Input - head of the stack |
|
||||||
; Note - Win9x systems requires reboot |
|
||||||
|
|
||||||
Function AddToPath |
|
||||||
Exch $0 |
|
||||||
Push $1 |
|
||||||
Push $2 |
|
||||||
Push $3 |
|
||||||
|
|
||||||
# don't add if the path doesn't exist |
|
||||||
IfFileExists "$0\*.*" "" AddToPath_done |
|
||||||
|
|
||||||
ReadEnvStr $1 PATH |
|
||||||
; if the path is too long for a NSIS variable NSIS will return a 0 |
|
||||||
; length string. If we find that, then warn and skip any path |
|
||||||
; modification as it will trash the existing path. |
|
||||||
StrLen $2 $1 |
|
||||||
IntCmp $2 0 CheckPathLength_ShowPathWarning CheckPathLength_Done CheckPathLength_Done |
|
||||||
CheckPathLength_ShowPathWarning: |
|
||||||
Messagebox MB_OK|MB_ICONEXCLAMATION "Warning! PATH too long installer unable to modify PATH!" |
|
||||||
Goto AddToPath_done |
|
||||||
CheckPathLength_Done: |
|
||||||
Push "$1;" |
|
||||||
Push "$0;" |
|
||||||
Call StrStr |
|
||||||
Pop $2 |
|
||||||
StrCmp $2 "" "" AddToPath_done |
|
||||||
Push "$1;" |
|
||||||
Push "$0\;" |
|
||||||
Call StrStr |
|
||||||
Pop $2 |
|
||||||
StrCmp $2 "" "" AddToPath_done |
|
||||||
GetFullPathName /SHORT $3 $0 |
|
||||||
Push "$1;" |
|
||||||
Push "$3;" |
|
||||||
Call StrStr |
|
||||||
Pop $2 |
|
||||||
StrCmp $2 "" "" AddToPath_done |
|
||||||
Push "$1;" |
|
||||||
Push "$3\;" |
|
||||||
Call StrStr |
|
||||||
Pop $2 |
|
||||||
StrCmp $2 "" "" AddToPath_done |
|
||||||
|
|
||||||
Call IsNT |
|
||||||
Pop $1 |
|
||||||
StrCmp $1 1 AddToPath_NT |
|
||||||
; Not on NT |
|
||||||
StrCpy $1 $WINDIR 2 |
|
||||||
FileOpen $1 "$1\autoexec.bat" a |
|
||||||
FileSeek $1 -1 END |
|
||||||
FileReadByte $1 $2 |
|
||||||
IntCmp $2 26 0 +2 +2 # DOS EOF |
|
||||||
FileSeek $1 -1 END # write over EOF |
|
||||||
FileWrite $1 "$\r$\nSET PATH=%PATH%;$3$\r$\n" |
|
||||||
FileClose $1 |
|
||||||
SetRebootFlag true |
|
||||||
Goto AddToPath_done |
|
||||||
|
|
||||||
AddToPath_NT: |
|
||||||
StrCmp $ADD_TO_PATH_ALL_USERS "1" ReadAllKey |
|
||||||
ReadRegStr $1 ${NT_current_env} "PATH" |
|
||||||
Goto DoTrim |
|
||||||
ReadAllKey: |
|
||||||
ReadRegStr $1 ${NT_all_env} "PATH" |
|
||||||
DoTrim: |
|
||||||
StrCmp $1 "" AddToPath_NTdoIt |
|
||||||
Push $1 |
|
||||||
Call Trim |
|
||||||
Pop $1 |
|
||||||
StrCpy $0 "$1;$0" |
|
||||||
AddToPath_NTdoIt: |
|
||||||
StrCmp $ADD_TO_PATH_ALL_USERS "1" WriteAllKey |
|
||||||
WriteRegExpandStr ${NT_current_env} "PATH" $0 |
|
||||||
Goto DoSend |
|
||||||
WriteAllKey: |
|
||||||
WriteRegExpandStr ${NT_all_env} "PATH" $0 |
|
||||||
DoSend: |
|
||||||
SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 |
|
||||||
|
|
||||||
AddToPath_done: |
|
||||||
Pop $3 |
|
||||||
Pop $2 |
|
||||||
Pop $1 |
|
||||||
Pop $0 |
|
||||||
FunctionEnd |
|
||||||
|
|
||||||
|
|
||||||
; RemoveFromPath - Remove a given dir from the path |
|
||||||
; Input: head of the stack |
|
||||||
|
|
||||||
Function un.RemoveFromPath |
|
||||||
Exch $0 |
|
||||||
Push $1 |
|
||||||
Push $2 |
|
||||||
Push $3 |
|
||||||
Push $4 |
|
||||||
Push $5 |
|
||||||
Push $6 |
|
||||||
|
|
||||||
IntFmt $6 "%c" 26 # DOS EOF |
|
||||||
|
|
||||||
Call un.IsNT |
|
||||||
Pop $1 |
|
||||||
StrCmp $1 1 unRemoveFromPath_NT |
|
||||||
; Not on NT |
|
||||||
StrCpy $1 $WINDIR 2 |
|
||||||
FileOpen $1 "$1\autoexec.bat" r |
|
||||||
GetTempFileName $4 |
|
||||||
FileOpen $2 $4 w |
|
||||||
GetFullPathName /SHORT $0 $0 |
|
||||||
StrCpy $0 "SET PATH=%PATH%;$0" |
|
||||||
Goto unRemoveFromPath_dosLoop |
|
||||||
|
|
||||||
unRemoveFromPath_dosLoop: |
|
||||||
FileRead $1 $3 |
|
||||||
StrCpy $5 $3 1 -1 # read last char |
|
||||||
StrCmp $5 $6 0 +2 # if DOS EOF |
|
||||||
StrCpy $3 $3 -1 # remove DOS EOF so we can compare |
|
||||||
StrCmp $3 "$0$\r$\n" unRemoveFromPath_dosLoopRemoveLine |
|
||||||
StrCmp $3 "$0$\n" unRemoveFromPath_dosLoopRemoveLine |
|
||||||
StrCmp $3 "$0" unRemoveFromPath_dosLoopRemoveLine |
|
||||||
StrCmp $3 "" unRemoveFromPath_dosLoopEnd |
|
||||||
FileWrite $2 $3 |
|
||||||
Goto unRemoveFromPath_dosLoop |
|
||||||
unRemoveFromPath_dosLoopRemoveLine: |
|
||||||
SetRebootFlag true |
|
||||||
Goto unRemoveFromPath_dosLoop |
|
||||||
|
|
||||||
unRemoveFromPath_dosLoopEnd: |
|
||||||
FileClose $2 |
|
||||||
FileClose $1 |
|
||||||
StrCpy $1 $WINDIR 2 |
|
||||||
Delete "$1\autoexec.bat" |
|
||||||
CopyFiles /SILENT $4 "$1\autoexec.bat" |
|
||||||
Delete $4 |
|
||||||
Goto unRemoveFromPath_done |
|
||||||
|
|
||||||
unRemoveFromPath_NT: |
|
||||||
StrCmp $ADD_TO_PATH_ALL_USERS "1" unReadAllKey |
|
||||||
ReadRegStr $1 ${NT_current_env} "PATH" |
|
||||||
Goto unDoTrim |
|
||||||
unReadAllKey: |
|
||||||
ReadRegStr $1 ${NT_all_env} "PATH" |
|
||||||
unDoTrim: |
|
||||||
StrCpy $5 $1 1 -1 # copy last char |
|
||||||
StrCmp $5 ";" +2 # if last char != ; |
|
||||||
StrCpy $1 "$1;" # append ; |
|
||||||
Push $1 |
|
||||||
Push "$0;" |
|
||||||
Call un.StrStr ; Find `$0;` in $1 |
|
||||||
Pop $2 ; pos of our dir |
|
||||||
StrCmp $2 "" unRemoveFromPath_done |
|
||||||
; else, it is in path |
|
||||||
# $0 - path to add |
|
||||||
# $1 - path var |
|
||||||
StrLen $3 "$0;" |
|
||||||
StrLen $4 $2 |
|
||||||
StrCpy $5 $1 -$4 # $5 is now the part before the path to remove |
|
||||||
StrCpy $6 $2 "" $3 # $6 is now the part after the path to remove |
|
||||||
StrCpy $3 $5$6 |
|
||||||
|
|
||||||
StrCpy $5 $3 1 -1 # copy last char |
|
||||||
StrCmp $5 ";" 0 +2 # if last char == ; |
|
||||||
StrCpy $3 $3 -1 # remove last char |
|
||||||
|
|
||||||
StrCmp $ADD_TO_PATH_ALL_USERS "1" unWriteAllKey |
|
||||||
WriteRegExpandStr ${NT_current_env} "PATH" $3 |
|
||||||
Goto unDoSend |
|
||||||
unWriteAllKey: |
|
||||||
WriteRegExpandStr ${NT_all_env} "PATH" $3 |
|
||||||
unDoSend: |
|
||||||
SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 |
|
||||||
|
|
||||||
unRemoveFromPath_done: |
|
||||||
Pop $6 |
|
||||||
Pop $5 |
|
||||||
Pop $4 |
|
||||||
Pop $3 |
|
||||||
Pop $2 |
|
||||||
Pop $1 |
|
||||||
Pop $0 |
|
||||||
FunctionEnd |
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
||||||
; Uninstall sutff |
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
||||||
|
|
||||||
########################################### |
|
||||||
# Utility Functions # |
|
||||||
########################################### |
|
||||||
|
|
||||||
;==================================================== |
|
||||||
; IsNT - Returns 1 if the current system is NT, 0 |
|
||||||
; otherwise. |
|
||||||
; Output: head of the stack |
|
||||||
;==================================================== |
|
||||||
; IsNT |
|
||||||
; no input |
|
||||||
; output, top of the stack = 1 if NT or 0 if not |
|
||||||
; |
|
||||||
; Usage: |
|
||||||
; Call IsNT |
|
||||||
; Pop $R0 |
|
||||||
; ($R0 at this point is 1 or 0) |
|
||||||
|
|
||||||
!macro IsNT un |
|
||||||
Function ${un}IsNT |
|
||||||
Push $0 |
|
||||||
ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion |
|
||||||
StrCmp $0 "" 0 IsNT_yes |
|
||||||
; we are not NT. |
|
||||||
Pop $0 |
|
||||||
Push 0 |
|
||||||
Return |
|
||||||
|
|
||||||
IsNT_yes: |
|
||||||
; NT!!! |
|
||||||
Pop $0 |
|
||||||
Push 1 |
|
||||||
FunctionEnd |
|
||||||
!macroend |
|
||||||
!insertmacro IsNT "" |
|
||||||
!insertmacro IsNT "un." |
|
||||||
|
|
||||||
; StrStr |
|
||||||
; input, top of stack = string to search for |
|
||||||
; top of stack-1 = string to search in |
|
||||||
; output, top of stack (replaces with the portion of the string remaining) |
|
||||||
; modifies no other variables. |
|
||||||
; |
|
||||||
; Usage: |
|
||||||
; Push "this is a long ass string" |
|
||||||
; Push "ass" |
|
||||||
; Call StrStr |
|
||||||
; Pop $R0 |
|
||||||
; ($R0 at this point is "ass string") |
|
||||||
|
|
||||||
!macro StrStr un |
|
||||||
Function ${un}StrStr |
|
||||||
Exch $R1 ; st=haystack,old$R1, $R1=needle |
|
||||||
Exch ; st=old$R1,haystack |
|
||||||
Exch $R2 ; st=old$R1,old$R2, $R2=haystack |
|
||||||
Push $R3 |
|
||||||
Push $R4 |
|
||||||
Push $R5 |
|
||||||
StrLen $R3 $R1 |
|
||||||
StrCpy $R4 0 |
|
||||||
; $R1=needle |
|
||||||
; $R2=haystack |
|
||||||
; $R3=len(needle) |
|
||||||
; $R4=cnt |
|
||||||
; $R5=tmp |
|
||||||
loop: |
|
||||||
StrCpy $R5 $R2 $R3 $R4 |
|
||||||
StrCmp $R5 $R1 done |
|
||||||
StrCmp $R5 "" done |
|
||||||
IntOp $R4 $R4 + 1 |
|
||||||
Goto loop |
|
||||||
done: |
|
||||||
StrCpy $R1 $R2 "" $R4 |
|
||||||
Pop $R5 |
|
||||||
Pop $R4 |
|
||||||
Pop $R3 |
|
||||||
Pop $R2 |
|
||||||
Exch $R1 |
|
||||||
FunctionEnd |
|
||||||
!macroend |
|
||||||
!insertmacro StrStr "" |
|
||||||
!insertmacro StrStr "un." |
|
||||||
|
|
||||||
Function Trim ; Added by Pelaca |
|
||||||
Exch $R1 |
|
||||||
Push $R2 |
|
||||||
Loop: |
|
||||||
StrCpy $R2 "$R1" 1 -1 |
|
||||||
StrCmp "$R2" " " RTrim |
|
||||||
StrCmp "$R2" "$\n" RTrim |
|
||||||
StrCmp "$R2" "$\r" RTrim |
|
||||||
StrCmp "$R2" ";" RTrim |
|
||||||
GoTo Done |
|
||||||
RTrim: |
|
||||||
StrCpy $R1 "$R1" -1 |
|
||||||
Goto Loop |
|
||||||
Done: |
|
||||||
Pop $R2 |
|
||||||
Exch $R1 |
|
||||||
FunctionEnd |
|
||||||
|
|
||||||
Function ConditionalAddToRegisty |
|
||||||
Pop $0 |
|
||||||
Pop $1 |
|
||||||
StrCmp "$0" "" ConditionalAddToRegisty_EmptyString |
|
||||||
WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" \ |
|
||||||
"$1" "$0" |
|
||||||
;MessageBox MB_OK "Set Registry: '$1' to '$0'" |
|
||||||
DetailPrint "Set install registry entry: '$1' to '$0'" |
|
||||||
ConditionalAddToRegisty_EmptyString: |
|
||||||
FunctionEnd |
|
||||||
|
|
||||||
;-------------------------------- |
|
||||||
|
|
||||||
!ifdef CPACK_USES_DOWNLOAD |
|
||||||
Function DownloadFile |
|
||||||
IfFileExists $INSTDIR\* +2 |
|
||||||
CreateDirectory $INSTDIR |
|
||||||
Pop $0 |
|
||||||
|
|
||||||
; Skip if already downloaded |
|
||||||
IfFileExists $INSTDIR\$0 0 +2 |
|
||||||
Return |
|
||||||
|
|
||||||
StrCpy $1 "@CPACK_DOWNLOAD_SITE@" |
|
||||||
|
|
||||||
try_again: |
|
||||||
NSISdl::download "$1/$0" "$INSTDIR\$0" |
|
||||||
|
|
||||||
Pop $1 |
|
||||||
StrCmp $1 "success" success |
|
||||||
StrCmp $1 "Cancelled" cancel |
|
||||||
MessageBox MB_OK "Download failed: $1" |
|
||||||
cancel: |
|
||||||
Return |
|
||||||
success: |
|
||||||
FunctionEnd |
|
||||||
!endif |
|
||||||
|
|
||||||
;-------------------------------- |
|
||||||
; Installation types |
|
||||||
@CPACK_NSIS_INSTALLATION_TYPES@ |
|
||||||
|
|
||||||
;-------------------------------- |
|
||||||
; Component sections |
|
||||||
@CPACK_NSIS_COMPONENT_SECTIONS@ |
|
||||||
|
|
||||||
;-------------------------------- |
|
||||||
; Define some macro setting for the gui |
|
||||||
@CPACK_NSIS_INSTALLER_MUI_ICON_CODE@ |
|
||||||
@CPACK_NSIS_INSTALLER_ICON_CODE@ |
|
||||||
@CPACK_NSIS_INSTALLER_MUI_COMPONENTS_DESC@ |
|
||||||
@CPACK_NSIS_INSTALLER_MUI_FINISHPAGE_RUN_CODE@ |
|
||||||
|
|
||||||
;-------------------------------- |
|
||||||
;Pages |
|
||||||
!insertmacro MUI_PAGE_WELCOME |
|
||||||
|
|
||||||
!insertmacro MUI_PAGE_LICENSE "@CPACK_RESOURCE_FILE_LICENSE@" |
|
||||||
Page custom InstallOptionsPage |
|
||||||
!insertmacro MUI_PAGE_DIRECTORY |
|
||||||
|
|
||||||
;Start Menu Folder Page Configuration |
|
||||||
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "SHCTX" |
|
||||||
!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" |
|
||||||
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" |
|
||||||
!define MUI_STARTMENUPAGE_DEFAULTFOLDER "Purple I2P" |
|
||||||
!insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER |
|
||||||
|
|
||||||
@CPACK_NSIS_PAGE_COMPONENTS@ |
|
||||||
|
|
||||||
!insertmacro MUI_PAGE_INSTFILES |
|
||||||
!insertmacro MUI_PAGE_FINISH |
|
||||||
|
|
||||||
!insertmacro MUI_UNPAGE_CONFIRM |
|
||||||
!insertmacro MUI_UNPAGE_INSTFILES |
|
||||||
|
|
||||||
;-------------------------------- |
|
||||||
;Languages |
|
||||||
|
|
||||||
!insertmacro MUI_LANGUAGE "English" ;first language is the default language |
|
||||||
!insertmacro MUI_LANGUAGE "Albanian" |
|
||||||
!insertmacro MUI_LANGUAGE "Arabic" |
|
||||||
!insertmacro MUI_LANGUAGE "Basque" |
|
||||||
!insertmacro MUI_LANGUAGE "Belarusian" |
|
||||||
!insertmacro MUI_LANGUAGE "Bosnian" |
|
||||||
!insertmacro MUI_LANGUAGE "Breton" |
|
||||||
!insertmacro MUI_LANGUAGE "Bulgarian" |
|
||||||
!insertmacro MUI_LANGUAGE "Croatian" |
|
||||||
!insertmacro MUI_LANGUAGE "Czech" |
|
||||||
!insertmacro MUI_LANGUAGE "Danish" |
|
||||||
!insertmacro MUI_LANGUAGE "Dutch" |
|
||||||
!insertmacro MUI_LANGUAGE "Estonian" |
|
||||||
!insertmacro MUI_LANGUAGE "Farsi" |
|
||||||
!insertmacro MUI_LANGUAGE "Finnish" |
|
||||||
!insertmacro MUI_LANGUAGE "French" |
|
||||||
!insertmacro MUI_LANGUAGE "German" |
|
||||||
!insertmacro MUI_LANGUAGE "Greek" |
|
||||||
!insertmacro MUI_LANGUAGE "Hebrew" |
|
||||||
!insertmacro MUI_LANGUAGE "Hungarian" |
|
||||||
!insertmacro MUI_LANGUAGE "Icelandic" |
|
||||||
!insertmacro MUI_LANGUAGE "Indonesian" |
|
||||||
!insertmacro MUI_LANGUAGE "Irish" |
|
||||||
!insertmacro MUI_LANGUAGE "Italian" |
|
||||||
!insertmacro MUI_LANGUAGE "Japanese" |
|
||||||
!insertmacro MUI_LANGUAGE "Korean" |
|
||||||
!insertmacro MUI_LANGUAGE "Kurdish" |
|
||||||
!insertmacro MUI_LANGUAGE "Latvian" |
|
||||||
!insertmacro MUI_LANGUAGE "Lithuanian" |
|
||||||
!insertmacro MUI_LANGUAGE "Luxembourgish" |
|
||||||
!insertmacro MUI_LANGUAGE "Macedonian" |
|
||||||
!insertmacro MUI_LANGUAGE "Malay" |
|
||||||
!insertmacro MUI_LANGUAGE "Mongolian" |
|
||||||
!insertmacro MUI_LANGUAGE "Norwegian" |
|
||||||
!insertmacro MUI_LANGUAGE "Polish" |
|
||||||
!insertmacro MUI_LANGUAGE "Portuguese" |
|
||||||
!insertmacro MUI_LANGUAGE "PortugueseBR" |
|
||||||
!insertmacro MUI_LANGUAGE "Romanian" |
|
||||||
!insertmacro MUI_LANGUAGE "Russian" |
|
||||||
!insertmacro MUI_LANGUAGE "Serbian" |
|
||||||
!insertmacro MUI_LANGUAGE "SerbianLatin" |
|
||||||
!insertmacro MUI_LANGUAGE "SimpChinese" |
|
||||||
!insertmacro MUI_LANGUAGE "Slovak" |
|
||||||
!insertmacro MUI_LANGUAGE "Slovenian" |
|
||||||
!insertmacro MUI_LANGUAGE "Spanish" |
|
||||||
!insertmacro MUI_LANGUAGE "Swedish" |
|
||||||
!insertmacro MUI_LANGUAGE "Thai" |
|
||||||
!insertmacro MUI_LANGUAGE "TradChinese" |
|
||||||
!insertmacro MUI_LANGUAGE "Turkish" |
|
||||||
!insertmacro MUI_LANGUAGE "Ukrainian" |
|
||||||
!insertmacro MUI_LANGUAGE "Welsh" |
|
||||||
|
|
||||||
|
|
||||||
;-------------------------------- |
|
||||||
;Reserve Files |
|
||||||
|
|
||||||
;These files should be inserted before other files in the data block |
|
||||||
;Keep these lines before any File command |
|
||||||
;Only for solid compression (by default, solid compression is enabled for BZIP2 and LZMA) |
|
||||||
|
|
||||||
ReserveFile "NSIS.InstallOptions.ini" |
|
||||||
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS |
|
||||||
|
|
||||||
;-------------------------------- |
|
||||||
;Installer Sections |
|
||||||
|
|
||||||
Section "-Core installation" |
|
||||||
;Use the entire tree produced by the INSTALL target. Keep the |
|
||||||
;list of directories here in sync with the RMDir commands below. |
|
||||||
SetOutPath "$INSTDIR" |
|
||||||
@CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS@ |
|
||||||
@CPACK_NSIS_FULL_INSTALL@ |
|
||||||
|
|
||||||
;Store installation folder |
|
||||||
WriteRegStr SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "" $INSTDIR |
|
||||||
|
|
||||||
;Create uninstaller |
|
||||||
WriteUninstaller "$INSTDIR\Uninstall.exe" |
|
||||||
Push "DisplayName" |
|
||||||
Push "@CPACK_NSIS_DISPLAY_NAME@" |
|
||||||
Call ConditionalAddToRegisty |
|
||||||
Push "DisplayVersion" |
|
||||||
Push "@CPACK_PACKAGE_VERSION@" |
|
||||||
Call ConditionalAddToRegisty |
|
||||||
Push "Publisher" |
|
||||||
Push "@CPACK_PACKAGE_VENDOR@" |
|
||||||
Call ConditionalAddToRegisty |
|
||||||
Push "UninstallString" |
|
||||||
Push "$INSTDIR\Uninstall.exe" |
|
||||||
Call ConditionalAddToRegisty |
|
||||||
Push "NoRepair" |
|
||||||
Push "1" |
|
||||||
Call ConditionalAddToRegisty |
|
||||||
|
|
||||||
!ifdef CPACK_NSIS_ADD_REMOVE |
|
||||||
;Create add/remove functionality |
|
||||||
Push "ModifyPath" |
|
||||||
Push "$INSTDIR\AddRemove.exe" |
|
||||||
Call ConditionalAddToRegisty |
|
||||||
!else |
|
||||||
Push "NoModify" |
|
||||||
Push "1" |
|
||||||
Call ConditionalAddToRegisty |
|
||||||
!endif |
|
||||||
|
|
||||||
; Optional registration |
|
||||||
Push "DisplayIcon" |
|
||||||
Push "$INSTDIR\@CPACK_NSIS_INSTALLED_ICON_NAME@" |
|
||||||
Call ConditionalAddToRegisty |
|
||||||
Push "HelpLink" |
|
||||||
Push "@CPACK_NSIS_HELP_LINK@" |
|
||||||
Call ConditionalAddToRegisty |
|
||||||
Push "URLInfoAbout" |
|
||||||
Push "@CPACK_NSIS_URL_INFO_ABOUT@" |
|
||||||
Call ConditionalAddToRegisty |
|
||||||
Push "Contact" |
|
||||||
Push "@CPACK_NSIS_CONTACT@" |
|
||||||
Call ConditionalAddToRegisty |
|
||||||
!insertmacro MUI_INSTALLOPTIONS_READ $INSTALL_DESKTOP "NSIS.InstallOptions.ini" "Field 5" "State" |
|
||||||
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application |
|
||||||
|
|
||||||
;Create shortcuts |
|
||||||
CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER" |
|
||||||
@CPACK_NSIS_CREATE_ICONS@ |
|
||||||
@CPACK_NSIS_CREATE_ICONS_EXTRA@ |
|
||||||
CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\Uninstall.exe" |
|
||||||
|
|
||||||
;Read a value from an InstallOptions INI file |
|
||||||
!insertmacro MUI_INSTALLOPTIONS_READ $DO_NOT_ADD_TO_PATH "NSIS.InstallOptions.ini" "Field 2" "State" |
|
||||||
!insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_ALL_USERS "NSIS.InstallOptions.ini" "Field 3" "State" |
|
||||||
!insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_CURRENT_USER "NSIS.InstallOptions.ini" "Field 4" "State" |
|
||||||
|
|
||||||
; Write special uninstall registry entries |
|
||||||
Push "StartMenu" |
|
||||||
Push "$STARTMENU_FOLDER" |
|
||||||
Call ConditionalAddToRegisty |
|
||||||
Push "DoNotAddToPath" |
|
||||||
Push "$DO_NOT_ADD_TO_PATH" |
|
||||||
Call ConditionalAddToRegisty |
|
||||||
Push "AddToPathAllUsers" |
|
||||||
Push "$ADD_TO_PATH_ALL_USERS" |
|
||||||
Call ConditionalAddToRegisty |
|
||||||
Push "AddToPathCurrentUser" |
|
||||||
Push "$ADD_TO_PATH_CURRENT_USER" |
|
||||||
Call ConditionalAddToRegisty |
|
||||||
Push "InstallToDesktop" |
|
||||||
Push "$INSTALL_DESKTOP" |
|
||||||
Call ConditionalAddToRegisty |
|
||||||
|
|
||||||
!insertmacro MUI_STARTMENU_WRITE_END |
|
||||||
|
|
||||||
@CPACK_NSIS_EXTRA_INSTALL_COMMANDS@ |
|
||||||
|
|
||||||
SectionEnd |
|
||||||
|
|
||||||
Section "-Add to path" |
|
||||||
Push $INSTDIR\bin |
|
||||||
StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 doNotAddToPath |
|
||||||
StrCmp $DO_NOT_ADD_TO_PATH "1" doNotAddToPath 0 |
|
||||||
Call AddToPath |
|
||||||
doNotAddToPath: |
|
||||||
SectionEnd |
|
||||||
|
|
||||||
;-------------------------------- |
|
||||||
; Create custom pages |
|
||||||
Function InstallOptionsPage |
|
||||||
!insertmacro MUI_HEADER_TEXT "Install Options" "Choose options for installing @CPACK_NSIS_PACKAGE_NAME@" |
|
||||||
!insertmacro MUI_INSTALLOPTIONS_DISPLAY "NSIS.InstallOptions.ini" |
|
||||||
|
|
||||||
FunctionEnd |
|
||||||
|
|
||||||
;-------------------------------- |
|
||||||
; determine admin versus local install |
|
||||||
Function un.onInit |
|
||||||
|
|
||||||
ClearErrors |
|
||||||
UserInfo::GetName |
|
||||||
IfErrors noLM |
|
||||||
Pop $0 |
|
||||||
UserInfo::GetAccountType |
|
||||||
Pop $1 |
|
||||||
StrCmp $1 "Admin" 0 +3 |
|
||||||
SetShellVarContext all |
|
||||||
;MessageBox MB_OK 'User "$0" is in the Admin group' |
|
||||||
Goto done |
|
||||||
StrCmp $1 "Power" 0 +3 |
|
||||||
SetShellVarContext all |
|
||||||
;MessageBox MB_OK 'User "$0" is in the Power Users group' |
|
||||||
Goto done |
|
||||||
|
|
||||||
noLM: |
|
||||||
;Get installation folder from registry if available |
|
||||||
|
|
||||||
done: |
|
||||||
|
|
||||||
FunctionEnd |
|
||||||
|
|
||||||
;--- Add/Remove callback functions: --- |
|
||||||
!macro SectionList MacroName |
|
||||||
;This macro used to perform operation on multiple sections. |
|
||||||
;List all of your components in following manner here. |
|
||||||
@CPACK_NSIS_COMPONENT_SECTION_LIST@ |
|
||||||
!macroend |
|
||||||
|
|
||||||
Section -FinishComponents |
|
||||||
;Removes unselected components and writes component status to registry |
|
||||||
!insertmacro SectionList "FinishSection" |
|
||||||
|
|
||||||
!ifdef CPACK_NSIS_ADD_REMOVE |
|
||||||
; Get the name of the installer executable |
|
||||||
System::Call 'kernel32::GetModuleFileNameA(i 0, t .R0, i 1024) i r1' |
|
||||||
StrCpy $R3 $R0 |
|
||||||
|
|
||||||
; Strip off the last 13 characters, to see if we have AddRemove.exe |
|
||||||
StrLen $R1 $R0 |
|
||||||
IntOp $R1 $R0 - 13 |
|
||||||
StrCpy $R2 $R0 13 $R1 |
|
||||||
StrCmp $R2 "AddRemove.exe" addremove_installed |
|
||||||
|
|
||||||
; We're not running AddRemove.exe, so install it |
|
||||||
CopyFiles $R3 $INSTDIR\AddRemove.exe |
|
||||||
|
|
||||||
addremove_installed: |
|
||||||
!endif |
|
||||||
SectionEnd |
|
||||||
;--- End of Add/Remove callback functions --- |
|
||||||
|
|
||||||
;-------------------------------- |
|
||||||
; Component dependencies |
|
||||||
Function .onSelChange |
|
||||||
!insertmacro SectionList MaybeSelectionChanged |
|
||||||
FunctionEnd |
|
||||||
|
|
||||||
;-------------------------------- |
|
||||||
;Uninstaller Section |
|
||||||
|
|
||||||
Section "Uninstall" |
|
||||||
ReadRegStr $START_MENU SHCTX \ |
|
||||||
"Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "StartMenu" |
|
||||||
;MessageBox MB_OK "Start menu is in: $START_MENU" |
|
||||||
ReadRegStr $DO_NOT_ADD_TO_PATH SHCTX \ |
|
||||||
"Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "DoNotAddToPath" |
|
||||||
ReadRegStr $ADD_TO_PATH_ALL_USERS SHCTX \ |
|
||||||
"Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "AddToPathAllUsers" |
|
||||||
ReadRegStr $ADD_TO_PATH_CURRENT_USER SHCTX \ |
|
||||||
"Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "AddToPathCurrentUser" |
|
||||||
;MessageBox MB_OK "Add to path: $DO_NOT_ADD_TO_PATH all users: $ADD_TO_PATH_ALL_USERS" |
|
||||||
ReadRegStr $INSTALL_DESKTOP SHCTX \ |
|
||||||
"Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "InstallToDesktop" |
|
||||||
;MessageBox MB_OK "Install to desktop: $INSTALL_DESKTOP " |
|
||||||
|
|
||||||
@CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS@ |
|
||||||
|
|
||||||
;Remove files we installed. |
|
||||||
;Keep the list of directories here in sync with the File commands above. |
|
||||||
@CPACK_NSIS_DELETE_FILES@ |
|
||||||
@CPACK_NSIS_DELETE_DIRECTORIES@ |
|
||||||
|
|
||||||
!ifdef CPACK_NSIS_ADD_REMOVE |
|
||||||
;Remove the add/remove program |
|
||||||
Delete "$INSTDIR\AddRemove.exe" |
|
||||||
!endif |
|
||||||
|
|
||||||
;Remove the uninstaller itself. |
|
||||||
Delete "$INSTDIR\Uninstall.exe" |
|
||||||
DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" |
|
||||||
|
|
||||||
;Remove the installation directory if it is empty. |
|
||||||
RMDir "$INSTDIR" |
|
||||||
|
|
||||||
; Remove the registry entries. |
|
||||||
DeleteRegKey SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" |
|
||||||
|
|
||||||
; Removes all optional components |
|
||||||
!insertmacro SectionList "RemoveSection_CPack" |
|
||||||
|
|
||||||
!insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP |
|
||||||
|
|
||||||
Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" |
|
||||||
@CPACK_NSIS_DELETE_ICONS@ |
|
||||||
@CPACK_NSIS_DELETE_ICONS_EXTRA@ |
|
||||||
|
|
||||||
;Delete empty start menu parent diretories |
|
||||||
StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP" |
|
||||||
|
|
||||||
startMenuDeleteLoop: |
|
||||||
ClearErrors |
|
||||||
RMDir $MUI_TEMP |
|
||||||
GetFullPathName $MUI_TEMP "$MUI_TEMP\.." |
|
||||||
|
|
||||||
IfErrors startMenuDeleteLoopDone |
|
||||||
|
|
||||||
StrCmp "$MUI_TEMP" "$SMPROGRAMS" startMenuDeleteLoopDone startMenuDeleteLoop |
|
||||||
startMenuDeleteLoopDone: |
|
||||||
|
|
||||||
; If the user changed the shortcut, then untinstall may not work. This should |
|
||||||
; try to fix it. |
|
||||||
StrCpy $MUI_TEMP "$START_MENU" |
|
||||||
Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" |
|
||||||
@CPACK_NSIS_DELETE_ICONS_EXTRA@ |
|
||||||
|
|
||||||
;Delete empty start menu parent diretories |
|
||||||
StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP" |
|
||||||
|
|
||||||
secondStartMenuDeleteLoop: |
|
||||||
ClearErrors |
|
||||||
RMDir $MUI_TEMP |
|
||||||
GetFullPathName $MUI_TEMP "$MUI_TEMP\.." |
|
||||||
|
|
||||||
IfErrors secondStartMenuDeleteLoopDone |
|
||||||
|
|
||||||
StrCmp "$MUI_TEMP" "$SMPROGRAMS" secondStartMenuDeleteLoopDone secondStartMenuDeleteLoop |
|
||||||
secondStartMenuDeleteLoopDone: |
|
||||||
|
|
||||||
DeleteRegKey /ifempty SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" |
|
||||||
|
|
||||||
Push $INSTDIR\bin |
|
||||||
StrCmp $DO_NOT_ADD_TO_PATH_ "1" doNotRemoveFromPath 0 |
|
||||||
Call un.RemoveFromPath |
|
||||||
doNotRemoveFromPath: |
|
||||||
SectionEnd |
|
||||||
|
|
||||||
;-------------------------------- |
|
||||||
; determine admin versus local install |
|
||||||
; Is install for "AllUsers" or "JustMe"? |
|
||||||
; Default to "JustMe" - set to "AllUsers" if admin or on Win9x |
|
||||||
; This function is used for the very first "custom page" of the installer. |
|
||||||
; This custom page does not show up visibly, but it executes prior to the |
|
||||||
; first visible page and sets up $INSTDIR properly... |
|
||||||
; Choose different default installation folder based on SV_ALLUSERS... |
|
||||||
; "Program Files" for AllUsers, "My Documents" for JustMe... |
|
||||||
|
|
||||||
Function .onInit |
|
||||||
StrCmp "@CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL@" "ON" 0 inst |
|
||||||
|
|
||||||
ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "UninstallString" |
|
||||||
StrCmp $0 "" inst |
|
||||||
|
|
||||||
MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION \ |
|
||||||
"@CPACK_NSIS_PACKAGE_NAME@ is already installed. $\n$\nDo you want to uninstall the old version before installing the new one?" \ |
|
||||||
IDYES uninst IDNO inst |
|
||||||
Abort |
|
||||||
|
|
||||||
;Run the uninstaller |
|
||||||
uninst: |
|
||||||
ClearErrors |
|
||||||
StrLen $2 "\Uninstall.exe" |
|
||||||
StrCpy $3 $0 -$2 # remove "\Uninstall.exe" from UninstallString to get path |
|
||||||
ExecWait '$0 _?=$3' ;Do not copy the uninstaller to a temp file |
|
||||||
|
|
||||||
IfErrors uninst_failed inst |
|
||||||
uninst_failed: |
|
||||||
MessageBox MB_OK|MB_ICONSTOP "Uninstall failed." |
|
||||||
Abort |
|
||||||
|
|
||||||
|
|
||||||
inst: |
|
||||||
; Reads components status for registry |
|
||||||
!insertmacro SectionList "InitSection" |
|
||||||
|
|
||||||
; check to see if /D has been used to change |
|
||||||
; the install directory by comparing it to the |
|
||||||
; install directory that is expected to be the |
|
||||||
; default |
|
||||||
StrCpy $IS_DEFAULT_INSTALLDIR 0 |
|
||||||
StrCmp "$INSTDIR" "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" 0 +2 |
|
||||||
StrCpy $IS_DEFAULT_INSTALLDIR 1 |
|
||||||
|
|
||||||
StrCpy $SV_ALLUSERS "JustMe" |
|
||||||
; if default install dir then change the default |
|
||||||
; if it is installed for JustMe |
|
||||||
StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2 |
|
||||||
StrCpy $INSTDIR "$DOCUMENTS\@CPACK_PACKAGE_INSTALL_DIRECTORY@" |
|
||||||
|
|
||||||
ClearErrors |
|
||||||
UserInfo::GetName |
|
||||||
IfErrors noLM |
|
||||||
Pop $0 |
|
||||||
UserInfo::GetAccountType |
|
||||||
Pop $1 |
|
||||||
StrCmp $1 "Admin" 0 +4 |
|
||||||
SetShellVarContext all |
|
||||||
;MessageBox MB_OK 'User "$0" is in the Admin group' |
|
||||||
StrCpy $SV_ALLUSERS "AllUsers" |
|
||||||
Goto done |
|
||||||
StrCmp $1 "Power" 0 +4 |
|
||||||
SetShellVarContext all |
|
||||||
;MessageBox MB_OK 'User "$0" is in the Power Users group' |
|
||||||
StrCpy $SV_ALLUSERS "AllUsers" |
|
||||||
Goto done |
|
||||||
|
|
||||||
noLM: |
|
||||||
StrCpy $SV_ALLUSERS "AllUsers" |
|
||||||
;Get installation folder from registry if available |
|
||||||
|
|
||||||
done: |
|
||||||
StrCmp $SV_ALLUSERS "AllUsers" 0 +3 |
|
||||||
StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2 |
|
||||||
StrCpy $INSTDIR "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" |
|
||||||
|
|
||||||
StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 noOptionsPage |
|
||||||
!insertmacro MUI_INSTALLOPTIONS_EXTRACT "NSIS.InstallOptions.ini" |
|
||||||
|
|
||||||
noOptionsPage: |
|
||||||
FunctionEnd |
|
Loading…
Reference in new issue