The latest PortableApps.com Installer can be found here:
https://portableapps.com/node/14939
The most recent version of the PortableApps.com Installer is 0.9.9.11. It was introduced on August 5, 2008.
;Copyright 2007-2008 John T. Haller of PortableApps.com ;Website: http://PortableApps.com/ ;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. ;EXCEPTION: Can be used with non-GPL apps distributed by PortableApps.com !define PORTABLEAPPSINSTALLERVERSION "0.9.9.11" ;=== BEGIN: BASIC INFORMATION === ;This section contains the basic information about the app !define NAME "AppName Portable" !define SHORTNAME "AppNamePortable" !define VERSION "1.2.3.4" !define FILENAME "AppName_Portable_1.2" !define CHECKRUNNING "AppNamePortable.exe" !define CLOSENAME "AppName Portable " !define ADDONSDIRECTORYPRESERVE "NONE" ;use "NONE" for no plugins directory or relative to install directory: App\AppName\plugins !define INSTALLERCOMMENTS "For additional details, visit PortableApps.com" !define INSTALLERADDITIONALTRADEMARKS "" ;end this entry with a period and a space if used !define INSTALLERLEGALCOPYRIGHT "PortableApps.com and contributors" !define INSTALLERLANGUAGE "English" ;one of the NSIS pre-defined languages supported: English, French, Italian, German, Japanese, SimpChinese ;== License. For no license agreement, comment out the next line by placing a semicolon at the start of it ;!define LICENSEAGREEMENT "eula.rtf" ;== Multi-Installer. If making an installer with no options (like additional languages), comment out the next line by placing a semicolon at the start of it ;!define MAINSECTIONTITLE "AppName Portable (English) [Required]" !ifdef MAINSECTIONTITLE !define MAINSECTIONDESCRIPTION "Install the portable app" !define OPTIONALSECTIONTITLE "Additional Languages" !define OPTIONALSECTIONDESCRIPTION "Add multilingual support for this app" !define OPTIONALSECTIONSELECTEDAPPINFOSUFFIX "(Multilingual)" !define OPTIONALSECTIONNOTSELECTEDAPPINFOSUFFIX "(English)" !endif ;=== Plugin Installer. If this is a plugin installer (not a full app installer), uncomment this line to skip adding the app size to the free space calculation and files in root directory ;!define PLUGININSTALLER "true" ;=== END: BASIC INFORMATION === !define MAINSECTIONIDX 0 !ifdef MAINSECTIONTITLE !define OPTIONALSECTIONIDX 1 !endif ;=== Program Details Name "${NAME}" OutFile "..\..\..\${FILENAME}.paf.exe" InstallDir "\${SHORTNAME}" Caption "${NAME} | PortableApps.com Installer" VIProductVersion "${VERSION}" VIAddVersionKey ProductName "${NAME}" VIAddVersionKey Comments "${INSTALLERCOMMENTS}" VIAddVersionKey CompanyName "PortableApps.com" VIAddVersionKey LegalCopyright "${INSTALLERLEGALCOPYRIGHT}" VIAddVersionKey FileDescription "${NAME}" VIAddVersionKey FileVersion "${VERSION}" VIAddVersionKey ProductVersion "${VERSION}" VIAddVersionKey InternalName "${NAME}" VIAddVersionKey LegalTrademarks "${INSTALLERADDITIONALTRADEMARKS}PortableApps.com is a Trademark of Rare Ideas, LLC." VIAddVersionKey OriginalFilename "${FILENAME}.paf.exe" VIAddVersionKey PortableApps.comInstallerVersion "${PORTABLEAPPSINSTALLERVERSION}" ;VIAddVersionKey PrivateBuild "" ;VIAddVersionKey SpecialBuild "" ;=== Runtime Switches SetCompress Auto SetCompressor /SOLID lzma SetCompressorDictSize 32 SetDatablockOptimize On CRCCheck on AutoCloseWindow True RequestExecutionLevel user ;=== Include !include MUI.nsh !include FileFunc.nsh !include LogicLib.nsh !insertmacro DriveSpace !insertmacro GetOptions !insertmacro GetDrives !insertmacro GetRoot !insertmacro GetSize !insertmacro GetParent !include TextFunc.nsh ;=== BEGIN: OPTIONAL INCLUDE COMPONENTS ;If the app needs to read or write config files (not INI files), uncomment the needed options ;!insertmacro ConfigRead ;!insertmacro ConfigReadS ;!insertmacro ConfigWrite ;!insertmacro ConfigWriteS ;=== END: OPTIONAL INCLUDE COMPONENTS ;=== Program Icon !ifdef PLUGININSTALLER Icon "PortableApps.comInstallerPlugin.ico" !define MUI_ICON "PortableApps.comInstallerPlugin.ico" !else Icon "..\..\App\AppInfo\appicon.ico" !define MUI_ICON "..\..\App\AppInfo\appicon.ico" !endif ;=== Icon & Stye === BrandingText "PortableApps.com - Your Digital Life, Anywhere™" ;=== Pages !define MUI_WELCOMEFINISHPAGE_BITMAP "PortableApps.comInstaller.bmp" !define MUI_WELCOMEPAGE_TITLE "${NAME}" !define MUI_WELCOMEPAGE_TEXT "$(welcome)" !define MUI_COMPONENTSPAGE_SMALLDESC !insertmacro MUI_PAGE_WELCOME !ifdef LICENSEAGREEMENT !define MUI_LICENSEPAGE_CHECKBOX !insertmacro MUI_PAGE_LICENSE "${LICENSEAGREEMENT}" !endif !ifdef MAINSECTIONTITLE !insertmacro MUI_PAGE_COMPONENTS !endif !define MUI_DIRECTORYPAGE_VERIFYONLEAVE !define MUI_PAGE_CUSTOMFUNCTION_LEAVE LeaveDirectory !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !define MUI_FINISHPAGE_TEXT "$(finish)" !insertmacro MUI_PAGE_FINISH ;=== Languages !insertmacro MUI_LANGUAGE "${INSTALLERLANGUAGE}" !include PortableApps.comInstallerLANG_${INSTALLERLANGUAGE}.nsh ;=== Variables Var FOUNDPORTABLEAPPSPATH !ifdef MAINSECTIONTITLE Var OPTIONAL1DONE !endif Function .onInit ${GetOptions} "$CMDLINE" "/DESTINATION=" $R0 IfErrors CheckLegacyDestination StrCpy $INSTDIR "$R0${SHORTNAME}" Goto InitDone CheckLegacyDestination: ClearErrors ${GetOptions} "$CMDLINE" "-o" $R0 IfErrors NoDestination StrCpy $INSTDIR "$R0${SHORTNAME}" Goto InitDone NoDestination: ClearErrors ${GetDrives} "HDD+FDD" GetDrivesCallBack StrCmp $FOUNDPORTABLEAPPSPATH "" DefaultDestination StrCpy $INSTDIR "$FOUNDPORTABLEAPPSPATH\${SHORTNAME}" Goto InitDone DefaultDestination: StrCpy $INSTDIR "\${SHORTNAME}" InitDone: FunctionEnd Function LeaveDirectory GetInstDirError $0 ;=== Does it already exist? (upgrade) IfFileExists "$INSTDIR" "" CheckInstallerError ;=== Check if app is running? StrCmp ${CHECKRUNNING} "NONE" CheckInstallerError FindProcDLL::FindProc "${CHECKRUNNING}" StrCmp $R0 "1" "" CheckInstallerError MessageBox MB_OK|MB_ICONINFORMATION `$(runwarning)` Abort CheckInstallerError: ${Switch} $0 ${Case} 0 ;=== Valid directory and enough free space ${Break} ${Case} 1 MessageBox MB_OK `$(invaliddirectory)` Abort ${Break} ${Case} 2 IfFileExists `$INSTDIR` "" NotEnoughSpaceNoUpgrade ;=== Is upgrade SectionGetSize ${MAINSECTIONIDX} $1 ;=== Space Required for App !ifdef MAINSECTIONTITLE SectionGetFlags ${OPTIONALSECTIONIDX} $9 IntOp $9 $9 & ${SF_SELECTED} IntCmp $9 ${SF_SELECTED} "" NoOptions SectionGetSize ${OPTIONALSECTIONIDX} $2 ;=== Space Required for App IntOp $1 $1 + $2 NoOptions: !endif ${GetRoot} `$INSTDIR` $2 ${DriveSpace} `$2\` "/D=F /S=K" $3 ;=== Space Free on Device !ifndef PLUGININSTALLER ;=== If not a plugin installer, add the current install size to free space ${GetSize} `$INSTDIR` "/M=*.* /S=0K /G=1" $4 $5 $6 ;=== Current installation size IntOp $3 $3 + $4 ;=== Space Free + Current Install Size !else Goto CalculateSpaceLeft !endif IfFileExists `$INSTDIR\Data` "" CheckPluginsDirectory ${GetSize} `$INSTDIR\Data` "/M=*.* /S=0K /G=1" $4 $5 $6 ;=== Size of Data directory IntOp $3 $3 - $4 ;=== Remove the data directory from the free space calculation CheckPluginsDirectory: StrCmp `${ADDONSDIRECTORYPRESERVE}` "NONE" CalculateSpaceLeft IfFileExists `$INSTDIR\${ADDONSDIRECTORYPRESERVE}` "" CalculateSpaceLeft ${GetSize} `$INSTDIR\${ADDONSDIRECTORYPRESERVE}` "/M=*.* /S=0K /G=1" $4 $5 $6 ;=== Size of Data directory IntOp $3 $3 - $4 ;=== Remove the plugins directory from the free space calculation CalculateSpaceLeft: IntCmp $3 $1 NotEnoughSpaceNoUpgrade NotEnoughSpaceNoUpgrade Goto EndNotEnoughSpace NotEnoughSpaceNoUpgrade: MessageBox MB_OK `$(notenoughspace)` Abort EndNotEnoughSpace: ${Break} ${EndSwitch} FunctionEnd Function GetDrivesCallBack ;=== Skip usual floppy letters StrCmp $8 "FDD" "" CheckForPortableAppsPath StrCmp $9 "A:\" End StrCmp $9 "B:\" End CheckForPortableAppsPath: IfFileExists "$9PortableApps" "" End StrCpy $FOUNDPORTABLEAPPSPATH "$9PortableApps" End: Push $0 FunctionEnd !ifdef MAINSECTIONTITLE Section "${MAINSECTIONTITLE}" !else Section "App Portable (required)" !endif SectionIn RO SetOutPath $INSTDIR !ifdef MAINSECTIONTITLE SectionGetFlags 1 $0 IntOp $0 $0 & ${SF_SELECTED} IntCmp $0 ${SF_SELECTED} MainSkipOptionalCleanup ;=== BEGIN: OPTIONAL NOT SELECTED CLEANUP CODE === ;This will be executed before install if the optional section (additional languages, etc) is not selected ;=== END: OPTIONAL NOT SELECTED CLEANUP CODE === MainSkipOptionalCleanup: !endif ;=== BEGIN: PRE-INSTALL CODE === ;This will be executed before the app is installed. Useful for cleaning up files no longer used. ;=== END: PRE-INSTALL CODE === File "..\..\*.*" SetOutPath $INSTDIR\App File /r "..\..\App\*.*" SetOutPath $INSTDIR\Other File /r "..\..\Other\*.*" CreateDirectory "$INSTDIR\Data" ;=== BEGIN: POST-INSTALL CODE === ;This will be executed after the app is installed. Useful for updating configuration files. ;=== END: POST-INSTALL CODE === ;=== Refresh PortableApps.com Menu (not final version) ${GetParent} `$INSTDIR` $0 ;=== Check that it exists at the right location DetailPrint '$(checkforplatform)' IfFileExists `$0\PortableApps.com\App\PortableAppsPlatform.exe` "" TheEnd ;=== Check that it's the real deal so we aren't hanging with no response MoreInfo::GetProductName `$0\PortableApps.com\App\PortableAppsPlatform.exe` Pop $1 StrCmp $1 "PortableApps.com Platform" "" TheEnd MoreInfo::GetCompanyName `$0\PortableApps.com\App\PortableAppsPlatform.exe` Pop $1 StrCmp $1 "PortableApps.com" "" TheEnd ;=== Check that it's running FindProcDLL::FindProc "PortableAppsPlatform.exe" StrCmp $R0 "1" "" TheEnd ;=== Send message for the Menu to refresh StrCpy $2 'PortableApps.comPlatformWindowMessageToRefresh$0\PortableApps.com\App\PortableAppsPlatform.exe' System::Call "user32::RegisterWindowMessage(t r2) i .r3" DetailPrint '$(refreshmenu)' SendMessage 65535 $3 0 0 TheEnd: SectionEnd !ifdef MAINSECTIONTITLE Section /o "${OPTIONALSECTIONTITLE}" SetOutPath $INSTDIR File /r "..\..\..\${SHORTNAME}Optional1\*.*" StrCpy $OPTIONAL1DONE "true" SectionEnd Section "-UpdateAppInfo" SecUpdateAppInfo StrCmp $OPTIONAL1DONE "true" SecUpdateAppInfoOptionalSelected StrCmp ${OPTIONALSECTIONNOTSELECTEDAPPINFOSUFFIX} "" SecUpdateAppInfoTheEnd ReadINIStr $0 "$INSTDIR\App\AppInfo\appinfo.ini" "Version" "DisplayVersion" WriteINIStr $INSTDIR\App\AppInfo\appinfo.ini" "Version" "DisplayVersion" "$0 ${OPTIONALSECTIONNOTSELECTEDAPPINFOSUFFIX}" Goto SecUpdateAppInfoTheEnd SecUpdateAppInfoOptionalSelected: StrCmp ${OPTIONALSECTIONSELECTEDAPPINFOSUFFIX} "" SecUpdateAppInfoTheEnd ReadINIStr $0 "$INSTDIR\App\AppInfo\appinfo.ini" "Version" "DisplayVersion" WriteINIStr $INSTDIR\App\AppInfo\appinfo.ini" "Version" "DisplayVersion" "$0 ${OPTIONALSECTIONSELECTEDAPPINFOSUFFIX}" SecUpdateAppInfoTheEnd: SectionEnd !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${MAINSECTIONIDX} "${MAINSECTIONDESCRIPTION}" !insertmacro MUI_DESCRIPTION_TEXT ${OPTIONALSECTIONIDX} "${OPTIONALSECTIONDESCRIPTION}" !insertmacro MUI_FUNCTION_DESCRIPTION_END !endif
Fixed Issues:
- Installer allows upgrades when there is not enough drive space overall but enough when you take into account the application's currently installed size while subtracting out the Data and plugins directories.
- Multi-Installer combined into main installer based on a single switch (commenting out a single line switches to single installer mode)
- Support for config file reading and writing
- Hover description added to main app with multi-install
- No NSIS compile warnings
- Language selection included included as simple define
This should fix all known issues and make the installer easier to use.
0.9.9.9: Minor update to take version number out of developer editable area
0.9.9.10: Add plugin installer capabilities
0.9.9.11: Fix bug in plugin installer free space calculation
... I'll use it for the next OOo packages.
Thanks for the new version
Paid for Software more or less?
What You need is OSS!
You're welcome
Sorry it took an extra day but I was planning on releasing it with the Firefox 3.0.1 test build which I've been having some issues with.
Sometimes, the impossible can become possible, if you're awesome!
I was thinking, perhaps it would be possible to put another warning saying the previous warning and this warning isn't a warning to worry over
BTW is the installer generator written in delphi or NSIS? (and does it compile it for you?)
I think since I have so much extra time and most of it can't be on the computer, I'll try to think up of a system that'll better integrate the installers... (But the main one I'm thinking of now is to have the silentinstall switch activated if the menu is used to install and let it send calls to the menu so that there's a more integrated UI for the platform).
Insert original signature here with Greasemonkey Script.
It creates the installer code and compiles it for you based on simple INI entries in appinfo.ini. It's written in NSIS.
The silent installer will be coming after that and will be silent when run from the updater within the Platform but not from the menu.
Sometimes, the impossible can become possible, if you're awesome!
So it includes NSIS Portable and executes it with the paramaters basically? Or does it do something else?
Insert original signature here with Greasemonkey Script.
It's not quite a full-blown NSIS install. It's just what's necessary to compile and the associated plugins for the installer only.
Sometimes, the impossible can become possible, if you're awesome!
Thanks for fixing the free space calculation bug!
I've just posted 0.9.9.5 which fixes the warnings and multi-installer free space issues.
Sometimes, the impossible can become possible, if you're awesome!
Can't compile the new installer when trying to create installer for CodeBlocks Portable, but it does recompile correctly for Filezilla Portable. I get an error on line 325Nevermind. I solved it. Forgot to comment out the multi installer stuff.
You may want to make note that it is now 2 lines that need to be commented out, instead of just 1
The developer formerly known as ZGitRDun8705
It should still be one. Which other one?
Sometimes, the impossible can become possible, if you're awesome!
;== Multi-Installer. If making an installer with no options (like additional languages), comment out the next line by placing a semicolon at the start of it
!define MAINSECTIONIDX 0
!define MAINSECTIONTITLE "CodeBlocks Portable (English) [Required]"
both !defines needed to be commented out in order for my Code::Blocks installer to recompile correctly
The developer formerly known as ZGitRDun8705
I'll rearrange those in final
Only "!define MAINSECTIONTITLE "CodeBlocks Portable (English) [Required]" needs to be commented out.
Sometimes, the impossible can become possible, if you're awesome!
ok thanks
The developer formerly known as ZGitRDun8705
This issue is now fixed in 0.9.9.6 in the Firefox 3.0.1 Pre-Release. See main topic.
Sometimes, the impossible can become possible, if you're awesome!
Can some of the defines be filled out with another constant ${APPNAME} ?
(This would also work for ${VERSION} in ${FILENAME}
(Oh, just wondering, why not just post the installer here? The internet right now is kinda slow... :()
Insert original signature here with Greasemonkey Script.
Hmm, might be a good opportunity to attempt to create a launcher for some applications. I gotta get NSIS
A minor update to 0.9.9.8 that adds the language selector into the main section at the top so you only need to edit one section for most apps.
Sometimes, the impossible can become possible, if you're awesome!
Could you paste the code?EDIT I really am a air head today.
Also, how would you feel about xVideoServiceThief? You want me to start another topic? It downloads videos from websites.
Too many lonely hearts in the real world
Too many bridges you can burn
Too many tables you can't turn
Don't wanna live my life in the real world
he did paste the code?
The developer formerly known as ZGitRDun8705
yeah.
That's why I'm an airhead.
Too many lonely hearts in the real world
Too many bridges you can burn
Too many tables you can't turn
Don't wanna live my life in the real world
that airhead part wasn't there when i started typing...oops
The developer formerly known as ZGitRDun8705
A minor update to take the installer version number out of the developer editable area
Sometimes, the impossible can become possible, if you're awesome!
I realized that most installers would now have multiple choice questions. Is this possible? (As for the Updater silent install, perhaps the saved installer settings would be put there so that the silent installer would know what options to use.)
Insert original signature here with Greasemonkey Script.
View picture
Picture
Am I doing anything wrong?
May the Shwartz be with you
!insertmacro DriveSpace
Post the source for me, would you?
Too many lonely hearts in the real world
Too many bridges you can burn
Too many tables you can't turn
Don't wanna live my life in the real world
here you go
Source
May the Shwartz be with you
Did it compile for you?
Note: you can use pastebin.com to post the source.
Its a bit more convenient.
Yeah, it looks good to go.
Too many lonely hearts in the real world
Too many bridges you can burn
Too many tables you can't turn
Don't wanna live my life in the real world
Could someone direct me to some resources for working with the installer. I love the apps I get here. I'd like to be able to start giving back to the community, I just need to start off with some Getting Started links.
Steven Binion
steven.binion@tekwolf.net
Get your web hosting as low as $3.83 per month at http://www.tekwolf.net
I'm gonna pst some stuff for this guy here:
https://portableapps.com/node/14834
Too many lonely hearts in the real world
Too many bridges you can burn
Too many tables you can't turn
Don't wanna live my life in the real world
I've updated the installer to 0.9.9.11 which adds and refines the ability to use the installer for plugin (Examples: GPG for Thunderbird, GIMP Windows for GIMP, language packs, etc). You simply uncomment the line that switches it to plugin mode (it's in the main editable section up top) and it won't subtract out the current install size when calculating the free space available on the drive and it will look for a PortableApps.comInstallerPlugin.ico icon within the Other\Source directory instead of using the main appicon.ico so the plugin installers can have their own custom icons. It's suggested that you rename PortableApps.comInstaller.nsi to PortableApps.comInstallerPlugin.nsi so that it won't overwrite the main PortableApps.comInstaller.nsi in the Source directory when you install a plugin.
I think this means that everything we currently use except the multi-lingual installer (see Toucan) is now contained within the PortableApps.com Installer, so we're one step closer to 1.0 and public availability for outside releases.
Sometimes, the impossible can become possible, if you're awesome!
... I've finished the new OOo 3 Beta 2 packages on the base of the last installer and will create the next packages on this excellent base.
I'll post the news story for the OOo 3 Beta 2 and set the release on SF on visible in two hours, if You don't send me a stop.
Paid for Software more or less?
What You need is OSS!
Sounds good. I'm not sure about Python as the option in OO, but we'll discuss later and not in this topic the merits of it.
I'm already finishing up the 0.10 installer. It splits out the config to a separate file so you don't have to keep cutting and pasting bits with updates. And it lets people create installers without coding (they still need to compile it themselves, though). I'll be posting it later.
Sometimes, the impossible can become possible, if you're awesome!