Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;Copyright (C) 2004-2009 John T. Haller
- ;Website: http://PortableApps.com/7-ZipPortable
- ;This software is OSI Certified Open Source Software.
- ;OSI Certified is a certification mark of the Open Source Initiative.
- ;This program is free software; you can redistribute it and/or
- ;modify it under the terms of the GNU General Public License
- ;as published by the Free Software Foundation; either version 2
- ;of the License, or (at your option) any later version.
- ;This program is distributed in the hope that it will be useful,
- ;but WITHOUT ANY WARRANTY; without even the implied warranty of
- ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ;GNU General Public License for more details.
- ;You should have received a copy of the GNU General Public License
- ;along with this program; if not, write to the Free Software
- ;Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- !define PORTABLEAPPNAME "Age of Empires Portable"
- !define NAME "AgeOfEmpiresPortable"
- !define APPNAME "AOE"
- !define VER "1.0.0.0"
- !define WEBSITE "PortableApps.com/AgeOfEmpiresPortable"
- !define DEFAULTEXE "EMPIRES.EXE"
- !define DEFAULTAPPDIR "AgeOfEmpires"
- !define DEFAULTSETTINGSPATH "settings"
- !define LAUNCHERLANGUAGE "English"
- ;=== Program Details
- Name "${PORTABLEAPPNAME}"
- OutFile "..\..\${NAME}.exe"
- Caption "${PORTABLEAPPNAME} | PortableApps.com"
- VIProductVersion "${VER}"
- VIAddVersionKey ProductName "${PORTABLEAPPNAME}"
- VIAddVersionKey Comments "Allows ${APPNAME} to be run from a removable drive. For additional details, visit ${WEBSITE}"
- VIAddVersionKey CompanyName "PortableApps.com"
- VIAddVersionKey LegalCopyright "John T. Haller"
- VIAddVersionKey FileDescription "${PORTABLEAPPNAME}"
- VIAddVersionKey FileVersion "${VER}"
- VIAddVersionKey ProductVersion "${VER}"
- VIAddVersionKey InternalName "${PORTABLEAPPNAME}"
- VIAddVersionKey LegalTrademarks "PortableApps.com is a Trademark of Rare Ideas, LLC."
- VIAddVersionKey OriginalFilename "${NAME}.exe"
- ;VIAddVersionKey PrivateBuild ""
- ;VIAddVersionKey SpecialBuild ""
- ;=== Runtime Switches
- CRCCheck On
- WindowIcon Off
- SilentInstall Silent
- AutoCloseWindow True
- RequestExecutionLevel user
- ; Best Compression
- SetCompress Auto
- SetCompressor /SOLID lzma
- SetCompressorDictSize 32
- SetDatablockOptimize On
- ;=== Include
- ;(Standard NSIS)
- !include Registry.nsh
- !include TextFunc.nsh
- !insertmacro GetParameters
- ;(Custom)
- !include ReadINIStrWithDefault.nsh
- ;=== Program Icon
- Icon "..\..\App\AppInfo\appicon.ico"
- ;=== Languages
- LoadLanguageFile "${NSISDIR}\Contrib\Language files\${LAUNCHERLANGUAGE}.nlf"
- !include PortableApps.comLauncherLANG_${LAUNCHERLANGUAGE}.nsh
- Var PROGRAMDIRECTORY
- Var SETTINGSDIRECTORY
- Var ADDITIONALPARAMETERS
- Var EXECSTRING
- Var PROGRAMEXECUTABLE
- Var INIPATH
- Var DISABLESPLASHSCREEN
- Var ISDEFAULTDIRECTORY
- Var SECONDARYLAUNCH
- Var FAILEDTORESTOREKEY
- Var MISSINGFILEORPATH
- Var APPLANGUAGE
- Section "Main"
- ;=== Check if already running
- System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${NAME}2") i .r1 ?e'
- Pop $0
- StrCmp $0 0 CheckForINI
- StrCpy $SECONDARYLAUNCH "true"
- CheckForINI:
- ;=== Find the INI file, if there is one
- IfFileExists "$EXEDIR\${NAME}.ini" "" NoINI
- StrCpy "$INIPATH" "$EXEDIR"
- Goto ReadINI
- ReadINI:
- ;=== Read the parameters from the INI file
- ${ReadINIStrWithDefault} $0 "$INIPATH\${NAME}.ini" "${NAME}" "${APPNAME}Directory" "App\${DEFAULTAPPDIR}"
- StrCpy "$PROGRAMDIRECTORY" "$EXEDIR\$0"
- ${ReadINIStrWithDefault} $0 "$INIPATH\${NAME}.ini" "${NAME}" "SettingsDirectory" "Data\${DEFAULTSETTINGSPATH}"
- StrCpy "$SETTINGSDIRECTORY" "$EXEDIR\$0"
- ;=== Check that the above required parameters are present
- IfErrors NoINI
- ${ReadINIStrWithDefault} $ADDITIONALPARAMETERS "$INIPATH\${NAME}.ini" "${NAME}" "AdditionalParameters" ""
- ${ReadINIStrWithDefault} $PROGRAMEXECUTABLE "$INIPATH\${NAME}.ini" "${NAME}" "${APPNAME}Executable" "${DEFAULTEXE}"
- ${ReadINIStrWithDefault} $DISABLESPLASHSCREEN "$INIPATH\${NAME}.ini" "${NAME}" "DisableSplashScreen" "false"
- ;=== Correct PROGRAMEXECUTABLE if blank
- StrCmp $PROGRAMEXECUTABLE "" "" CheckForProgramINI
- StrCpy "$PROGRAMEXECUTABLE" "${DEFAULTEXE}"
- Goto CheckForProgramINI
- CheckForProgramINI:
- IfFileExists "$PROGRAMDIRECTORY\$PROGRAMEXECUTABLE" FoundProgramEXE NoProgramEXE
- NoINI:
- ;=== No INI file, so we'll use the defaults
- StrCpy "$ADDITIONALPARAMETERS" ""
- StrCpy "$PROGRAMEXECUTABLE" "${DEFAULTEXE}"
- StrCpy "$DISABLESPLASHSCREEN" "false"
- IfFileExists "$EXEDIR\App\${DEFAULTAPPDIR}\${DEFAULTEXE}" "" NoProgramEXE
- StrCpy "$PROGRAMDIRECTORY" "$EXEDIR\App\${DEFAULTAPPDIR}"
- StrCpy "$SETTINGSDIRECTORY" "$EXEDIR\Data\${DEFAULTSETTINGSPATH}"
- StrCpy "$ISDEFAULTDIRECTORY" "true"
- GoTo FoundProgramEXE
- NoProgramEXE:
- ;=== Program executable not where expected
- StrCpy $MISSINGFILEORPATH $PROGRAMEXECUTABLE
- MessageBox MB_OK|MB_ICONEXCLAMATION `$(LauncherFileNotFound)`
- Abort
- FoundProgramEXE:
- ;=== Check if already running
- StrCmp $SECONDARYLAUNCH "true" CheckForSettings
- FindProcDLL::FindProc "$PROGRAMEXECUTABLE"
- StrCmp $R0 "1" WarnAnotherInstance CheckForSettings
- WarnAnotherInstance:
- MessageBox MB_OK|MB_ICONINFORMATION `$(LauncherAlreadyRunning)`
- Abort
- CheckForSettings:
- IfFileExists "$SETTINGSDIRECTORY\*.*" GetPassedParameters
- ;=== No settings found
- StrCmp $ISDEFAULTDIRECTORY "true" CopyDefaultSettings
- CreateDirectory $SETTINGSDIRECTORY
- Goto SettingsFound
- CopyDefaultSettings:
- CreateDirectory "$EXEDIR\Data"
- CreateDirectory "$EXEDIR\Data\settings"
- CopyFiles /SILENT $EXEDIR\App\DefaultData\settings\*.* $EXEDIR\Data\settings
- GoTo SettingsFound
- SettingsFound:
- StrCpy $DISABLESPLASHSCREEN "true"
- StrCmp $DISABLESPLASHSCREEN "true" GetPassedParameters
- ;=== Show the splash screen before processing the files
- InitPluginsDir
- File /oname=$PLUGINSDIR\splash.jpg "${NAME}.jpg"
- newadvsplash::show /NOUNLOAD 1500 0 0 -1 /L $PLUGINSDIR\splash.jpg
- GetPassedParameters:
- ;=== Get any passed parameters
- ${GetParameters} $0
- StrCmp "'$0'" "''" "" LaunchProgramParameters
- ;=== No parameters
- StrCpy $EXECSTRING `"$PROGRAMDIRECTORY\$PROGRAMEXECUTABLE"`
- Goto AdditionalParameters
- LaunchProgramParameters:
- StrCpy $EXECSTRING `"$PROGRAMDIRECTORY\$PROGRAMEXECUTABLE" $0`
- AdditionalParameters:
- StrCmp $ADDITIONALPARAMETERS "" LaunchNow
- ;=== Additional Parameters
- StrCpy $EXECSTRING `$EXECSTRING $ADDITIONALPARAMETERS`
- /*RegistryBackup:
- StrCmp $SECONDARYLAUNCH "true" LaunchAndExit
- ;=== Backup the registry
- ${registry::KeyExists} "HKEY_CURRENT_USER\Software\Microsoft\Games\Age of Empires\1.00BACKUP" $R0
- StrCmp $R0 "0" RestoreTheKey
- ${registry::KeyExists} "HKEY_CURRENT_USER\Software\Microsoft\Games\Age of Empires\1.00" $R0
- StrCmp $R0 "-1" RestoreTheKey
- ${registry::MoveKey} "HKEY_CURRENT_USER\Software\Microsoft\Games\Age of Empires\1.00" "HKEY_CURRENT_USER\Software\Microsoft\Games\Age of Empires\1.00BACKUP" $R0
- Sleep 100
- RestoreTheKey:
- IfFileExists "$SETTINGSDIRECTORY\aoe.reg" "" LaunchNow
- IfFileExists "$WINDIR\system32\reg.exe" "" RestoreTheKey9x
- nsExec::ExecToStack `"$WINDIR\system32\reg.exe" import "$SETTINGSDIRECTORY\aoe.reg"`
- Pop $R0
- StrCmp $R0 '0' LaunchNow ;successfully restored key
- RestoreTheKey9x:
- ${registry::RestoreKey} "$SETTINGSDIRECTORY\aoe.reg" $R0
- StrCmp $R0 '0' LaunchNow ;successfully restored key
- StrCpy $FAILEDTORESTOREKEY "true"*/
- LaunchNow:
- Sleep 100
- ExecWait $EXECSTRING
- CheckRunning:
- Sleep 1000
- FindProcDLL::FindProc "${DEFAULTEXE}"
- StrCmp $R0 "1" CheckRunning
- StrCmp $FAILEDTORESTOREKEY "true" SetOriginalKeyBack
- ${registry::SaveKey} "HKEY_CURRENT_USER\Software\Microsoft\Games\Age of Empires\1.00" "$SETTINGSDIRECTORY\aoe.reg" "" $0
- Sleep 100
- SetOriginalKeyBack:
- ${registry::DeleteKey} "HKEY_CURRENT_USER\Software\Microsoft\Games\Age of Empires\1.00" $R0
- Sleep 100
- ${registry::KeyExists} "HKEY_CURRENT_USER\Software\Microsoft\Games\Age of Empires\1.00BACKUP" $R0
- StrCmp $R0 "-1" TheEnd
- ${registry::MoveKey} "HKEY_CURRENT_USER\Software\Microsoft\Games\Age of Empires\1.00BACKUP" "HKEY_CURRENT_USER\Software\Microsoft\Games\Age of Empires\1.00" $R0
- Sleep 100
- Goto TheEnd
- LaunchAndExit:
- Exec $EXECSTRING
- TheEnd:
- ${registry::Unload}
- newadvsplash::stop /WAIT
- SectionEnd
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement