I am trying to implement code in a launcher to modify the path to the App directory within an ini. Is there a good example in a launcher or something I could look at/lift out? Below is the ini file.
AppDir = "C:\VTPSUHM\" MessagesEnabled = 1
New: InnoUnpacker (Sep 17, 2025), Platform 30.1 (Sep 27, 2025)
1,400+ portable packages, 1.2 billion downloads
We are operating at a loss, please donate today
I am trying to implement code in a launcher to modify the path to the App directory within an ini. Is there a good example in a launcher or something I could look at/lift out? Below is the ini file.
AppDir = "C:\VTPSUHM\" MessagesEnabled = 1
Hi Devo,
Wouldn't it be enough to modify the ini file once, and locate it in the DefaultData folder. And then, replace the drive letter at every startup !
Formerly Gringoloco
Windows XP Pro sp3 x32
I'm sure that would be easy, but I'd rather update the entire path. The reason being is that this is a program I will be using for school and I'm going to have a copy on my laptop and one on my flash drive. The folder paths are different, so I was hoping to not have to manually put in the path for each.
Also, not everybody has the same folder structure, so the default of
might not work for everybody. The path would have to be updated any time a user has a different folder structure. Why not automate the process?
So use some thing like:
at every startup!
Formerly Gringoloco
Windows XP Pro sp3 x32
So I tried adding in that code, but it doesn't seem to do anything. The string never gets replaced. Below is my launcher, what am I doing wrong?
;Copyright 2004-2009 John T. Haller ;Copyright 2008-2009 Devo ;Website: http://PortableApps.com/VTPSUHMPortable ;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 "VTPSUHM Portable" !define APPNAME "VTPSUHM" !define NAME "VTPSUHMPortable" !define VER "1.6.8.0" !define WEBSITE "PortableApps.com/Development/test" !define DEFAULTEXE "VTPSUHM7.exe" !define DEFAULTAPPDIR "VTPSUHM" !define DEFAULTSETTINGSDIR "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 "PortableApps.com & Contributors" 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 XPStyle On ; Best Compression SetCompress Auto SetCompressor /SOLID lzma SetCompressorDictSize 32 SetDatablockOptimize On ;=== Include ;(Standard NSIS) !include GetParameters.nsh ;!include Registry.nsh ;(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 SECONDARYLAUNCH Var MISSINGFILEORPATH Var ISDEFAULTDIRECTORY ;Var FAILEDTORESTOREKEY Section "Main" ;=== Check if already running System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${NAME}") i .r1 ?e' Pop $0 StrCmp $0 0 CheckINI StrCpy $SECONDARYLAUNCH "true" CheckINI: ;=== Find the INI file, if there is one IfFileExists "$EXEDIR\${NAME}.ini" "" NoINI StrCpy $INIPATH "$EXEDIR" ;=== 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\${DEFAULTSETTINGSDIR}" StrCpy $SETTINGSDIRECTORY "$EXEDIR\$0" ${ReadINIStrWithDefault} $PROGRAMEXECUTABLE "$INIPATH\${NAME}.ini" "${NAME}" "${APPNAME}Executable" "${DEFAULTEXE}" ${ReadINIStrWithDefault} $ADDITIONALPARAMETERS "$INIPATH\${NAME}.ini" "${NAME}" "AdditionalParameters" "" ${ReadINIStrWithDefault} $DISABLESPLASHSCREEN "$INIPATH\${NAME}.ini" "${NAME}" "DisableSplashScreen" "false" IfFileExists "$PROGRAMDIRECTORY\$PROGRAMEXECUTABLE" FoundProgramEXE NoProgramEXE NoINI: ;=== No INI file, so we'll use the defaults StrCpy $PROGRAMEXECUTABLE "${DEFAULTEXE}" StrCpy $ADDITIONALPARAMETERS "" StrCpy $DISABLESPLASHSCREEN "false" IfFileExists "$EXEDIR\App\${DEFAULTAPPDIR}\${DEFAULTEXE}" "" NoProgramEXE StrCpy $PROGRAMDIRECTORY "$EXEDIR\App\${DEFAULTAPPDIR}" StrCpy $SETTINGSDIRECTORY "$EXEDIR\Data\${DEFAULTSETTINGSDIR}" StrCpy $ISDEFAULTDIRECTORY "true" Goto FoundProgramEXE NoProgramEXE: ;=== Program executable not where expected StrCpy $MISSINGFILEORPATH $PROGRAMEXECUTABLE MessageBox MB_OK|MB_SETFOREGROUND|MB_ICONEXCLAMATION `$(LauncherFileNotFound)` Goto TheEnd FoundProgramEXE: StrCmp $SECONDARYLAUNCH "true" GetPassedParameters FindProc $1 "${DEFAULTEXE}" StrCmp $R0 "1" WarnAnotherInstance DisplaySplash WarnAnotherInstance: MessageBox MB_OK|MB_SETFOREGROUND|MB_USERICON `$(LauncherAlreadyRunning)` Goto TheEnd DisplaySplash: StrCmp $DISABLESPLASHSCREEN "true" CheckForSettings ;=== Show the splash screen before processing the files InitPluginsDir File /oname=$PLUGINSDIR\splash.jpg "${NAME}.jpg" newadvsplash::show /NOUNLOAD 1200 0 0 -1 /L "$PLUGINSDIR\splash.jpg" CheckForSettings: IfFileExists "$SETTINGSDIRECTORY\*.*" GetPassedParameters ;=== No settings found StrCmp $ISDEFAULTDIRECTORY "true" CopyDefaultSettings CreateDirectory $SETTINGSDIRECTORY Goto GetPassedParameters CopyDefaultSettings: CreateDirectory "$EXEDIR\Data" CreateDirectory "$EXEDIR\Data\settings" CopyFiles /SILENT $EXEDIR\App\DefaultData\settings\*.* $EXEDIR\Data\settings Goto GetPassedParameters GetPassedParameters: ;=== Get any passed parameters Call GetParameters Pop $0 StrCmp "'$0'" "''" "" LaunchProgramParameters ;=== No parameters StrCpy $EXECSTRING `"$PROGRAMDIRECTORY\$PROGRAMEXECUTABLE"` Goto AdditionalParameters LaunchProgramParameters: StrCpy $EXECSTRING `"$PROGRAMDIRECTORY\$PROGRAMEXECUTABLE" $0` AdditionalParameters: StrCmp $ADDITIONALPARAMETERS "" UpdateDirectory ;=== Additional Parameters StrCpy $EXECSTRING `$EXECSTRING $ADDITIONALPARAMETERS` UpdateDirectory: writeINIstr 'VTPSUHM.ini' '' 'AppDir' '"$EXEDIR\App\VTPSUHM\"' LaunchNow: CopyFiles /SILENT "$SETTINGSDIRECTORY\VTPSUHM.INI" "$PROGRAMDIRECTORY\VTPSUHM.INI" CopyFiles /SILENT "$SETTINGSDIRECTORY\VTPSUHM.GID" "$PROGRAMDIRECTORY\VTPSUHM.GID" Sleep 100 ExecWait $EXECSTRING CheckRunning: Sleep 1000 FindProcDLL::FindProc "${DEFAULTEXE}" StrCmp $R0 "1" CheckRunning ;MoveSettingsBack: Sleep 100 Delete "$SETTINGSDIRECTORY\VTPSUHM.INI" Rename "$PROGRAMDIRECTORY\VTPSUHM.INI" "$SETTINGSDIRECTORY\VTPSUHM.INI" Delete "$SETTINGSDIRECTORY\VTPSUHM.GID" Rename "$PROGRAMDIRECTORY\VTPSUHM.GID" "$SETTINGSDIRECTORY\VTPSUHM.GID" Goto TheEnd LaunchAndExit: Exec $EXECSTRING TheEnd: newadvsplash::stop /WAIT SectionEndYou forgot to add the directory of the ini file.
As well, you will need to add a 'section name', if you have a look at the ini file you will see the name of the section between [], just above the 'AppDir' entry !
Formerly Gringoloco
Windows XP Pro sp3 x32
Unfortunately there is no section name, so I tried to just leave it blank. I posted the entire ini in the initial post.
There are only 2 lines in the entire ini
There are a few options you could try:
Formerly Gringoloco
Windows XP Pro sp3 x32
Adding a section header fixed it. Now I just need to find where else the settings are hiding. They're not in the registry or in AppData. Anyways, thanks for your help.
cheesy fix. It works, but you're (more) likely to run into trouble. Use ConfigWrite.
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
check out configwrite
E.2.11 ConfigWrite Write value from entry name in config file. Syntax: ${ConfigWrite} "[File]" "[Entry]" "[Value]" $var "[File]" ; config file ; "[Entry]" ; entry name ; "[Value]" ; value name ; if "" then delete Entry ; $var ; Result: ; $var=CHANGED Value is written ; $var=DELETED Entry is deleted ; $var=ADDED Entry and Value are added ; $var=SAME Entry and Value already existToo 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
GIMP Portable has what you're looking for.
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