I am trying to pafify Dropcloth portable version but every time I run the launcher it saves the settings where the launcher is. Am I doing something wrong?
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 had the same problem with OpenYahtzee Portable. put this line in somewhere at the start:
SetOutDir "$EXEDIR\Data\Settings"
why this fixes it: dropcloth saves the config in the working directory, which is usally set by windows when you run the exe directly. so what that line of code does is set the working directory to the data folder, so that the settings file is saved there. and if this is a little unclear, can a mod fix it up?
But there’s no sense crying over every mistake,
You just keep on trying till you run out of cake.
but I used
SetOutPath $SETTINGSDIRECTORYwhich makes it more flexibleInsert original signature here with Greasemonkey Script.
as taneth said, you need the SetOutDir code. put it just before the actual launch of the app.
The developer formerly known as ZGitRDun8705
I added the line in the code but when I compile the script the launcher doesn't show up.
Link to code:
Launcher source code
May the Shwartz be with you
Does dropcloth have any paths in the INI file?
One more reason you can't compile is because VER is supposed to have 4 values separated by .'s and the Version is for launcher, not the app ;). I fixed up the code:
;Copyright (C) 2004-2008 John T. Haller of PortableApps.com ;Copyright (C) 2008 App Guy ;Website: https://portableapps.com/DropClothPortable ;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 "Drop Cloth Portable" !define APPNAME "DropCloth" !define NAME "DropClothPortable" !define VER "1.5.5.0" !define WEBSITE "PortableApps.com/DropClothPortable" !define DEFAULTEXE "dropcloth.exe" !define DEFAULTAPPDIR "DropCloth" ;=== 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 and 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 ; Best Compression SetCompress Auto SetCompressor /SOLID lzma SetCompressorDictSize 32 SetDatablockOptimize On ;=== Include !include "FileFunc.nsh" !insertmacro GetParameters !insertmacro GetRoot !include "ReplaceInFile.nsh" !include "StrRep.nsh" !include "MUI.nsh" ;=== Program Icon Icon "..\..\App\AppInfo\appicon.ico" ;=== Icon & Stye === !define MUI_ICON "..\..\App\AppInfo\appicon.ico" ;=== Languages !insertmacro MUI_LANGUAGE "English" LangString LauncherFileNotFound ${LANG_ENGLISH} "${PORTABLEAPPNAME} cannot be started. You may wish to re-install to fix this issue. (ERROR: $MISSINGFILEORPATH could not be found)" LangString LauncherAlreadyRunning ${LANG_ENGLISH} "Another instance of ${APPNAME} is already running. Please close other instances of ${APPNAME} before launching ${PORTABLEAPPNAME}." LangString LauncherAskCopyLocal ${LANG_ENGLISH} "${PORTABLEAPPNAME} appears to be running from a location that is read-only. Would you like to temporarily copy it to the local hard drive and run it from there?$\n$\nPrivacy Note: If you say Yes, your personal data within ${PORTABLEAPPNAME} will be temporarily copied to a local drive. Although this copy of your data will be deleted when you close ${PORTABLEAPPNAME}, it may be possible for someone else to access your data later." LangString LauncherNoReadOnly ${LANG_ENGLISH} "${PORTABLEAPPNAME} can not run directly from a read-only location and will now close." Var PROGRAMDIRECTORY Var SETTINGSDIRECTORY Var ADDITIONALPARAMETERS Var EXECSTRING Var PROGRAMEXECUTABLE Var INIPATH Var SECONDARYLAUNCH Var DISABLESPLASHSCREEN Var LASTDRIVE Var CURRENTDRIVE Var MISSINGFILEORPATH 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" "" CheckSubINI StrCpy "$INIPATH" "$EXEDIR" Goto ReadINI CheckSubINI: IfFileExists "$EXEDIR\${NAME}\${NAME}.ini" "" NoINI StrCpy "$INIPATH" "$EXEDIR\${NAME}" Goto ReadINI ReadINI: ;=== Read the parameters from the INI file ReadINIStr $0 "$INIPATH\${NAME}.ini" "${NAME}" "${APPNAME}Directory" StrCpy "$PROGRAMDIRECTORY" "$EXEDIR\$0" ReadINIStr $0 "$INIPATH\${NAME}.ini" "${NAME}" "SettingsDirectory" StrCpy "$SETTINGSDIRECTORY" "$EXEDIR\$0" ;=== Check that the above required parameters are present IfErrors NoINI ReadINIStr $ADDITIONALPARAMETERS "$INIPATH\${NAME}.ini" "${NAME}" "AdditionalParameters" ReadINIStr $DISABLESPLASHSCREEN "$INIPATH\${NAME}.ini" "${NAME}" "DisableSplashScreen" ;CleanUpAnyErrors: ;=== Any missing unrequired INI entries will be an empty string, ignore associated errors ClearErrors ;=== Correct PROGRAMEXECUTABLE if blank StrCmp $PROGRAMEXECUTABLE "" "" EndINI StrCpy "$PROGRAMEXECUTABLE" "${DEFAULTEXE}" Goto EndINI NoINI: ;=== No INI file, so we'll use the defaults StrCpy "$ADDITIONALPARAMETERS" "" StrCpy "$PROGRAMEXECUTABLE" "${DEFAULTEXE}" IfFileExists "$EXEDIR\App\${DEFAULTAPPDIR}\${DEFAULTEXE}" "" NoProgramEXE StrCpy "$PROGRAMDIRECTORY" "$EXEDIR\App\${DEFAULTAPPDIR}" StrCpy "$SETTINGSDIRECTORY" "$EXEDIR\Data\settings" GoTo EndINI EndINI: IfFileExists "$PROGRAMDIRECTORY\$PROGRAMEXECUTABLE" FoundProgramEXE NoProgramEXE: ;=== Program executable not where expected StrCpy $MISSINGFILEORPATH $PROGRAMEXECUTABLE MessageBox MB_OK|MB_ICONEXCLAMATION `$(LauncherFileNotFound)` Abort FoundProgramEXE: ;=== Check if running StrCmp $SECONDARYLAUNCH "true" GetPassedParameters FindProcDLL::FindProc "${DEFAULTEXE}" StrCmp $R0 "1" WarnAnotherInstance DisplaySplash WarnAnotherInstance: MessageBox MB_OK|MB_ICONINFORMATION `$(LauncherAlreadyRunning)` Abort DisplaySplash: StrCmp $DISABLESPLASHSCREEN "true" GetPassedParameters ;=== Show the splash screen while processing registry entries InitPluginsDir File /oname=$PLUGINSDIR\splash.jpg "${NAME}.jpg" newadvsplash::show /NOUNLOAD 1000 100 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 "" SettingsDirectory ;=== Additional Parameters StrCpy $EXECSTRING `$EXECSTRING $ADDITIONALPARAMETERS` SettingsDirectory: ;=== Set the settings directory if we have a path IfFileExists "$SETTINGSDIRECTORY\*.*" CheckForSettings CreateDirectory $SETTINGSDIRECTORY ;LaunchNow: SetOutPath $SETTINGSDIRECTORY ExecWait $EXECSTRING CheckRunning: Sleep 1000 FindProcDLL::FindProc "${DEFAULTEXE}" StrCmp $R0 "1" CheckRunning TheEnd LaunchAndExit: SetOutPath $SETTINGSDIRECTORY Exec $EXECSTRING TheEnd: newadvsplash::stop /WAIT SectionEndInsert original signature here with Greasemonkey Script.
Thank you. I am sort of new at this.
Edit: O great I have a problem (like always). I have an error. Here is a link to the picture
Error in compiling
May the Shwartz be with you
Somewhere, you have have a Goto that has no where 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
;Copyright (C) 2004-2008 John T. Haller of PortableApps.com ;Copyright (C) 2008 App Guy ;Website: https://portableapps.com/DropClothPortable ;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 "Drop Cloth Portable" !define APPNAME "DropCloth" !define NAME "DropClothPortable" !define VER "1.5.5.0" !define WEBSITE "PortableApps.com/DropClothPortable" !define DEFAULTEXE "dropcloth.exe" !define DEFAULTAPPDIR "DropCloth" ;=== 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 and 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 ; Best Compression SetCompress Auto SetCompressor /SOLID lzma SetCompressorDictSize 32 SetDatablockOptimize On ;=== Include !include "FileFunc.nsh" !insertmacro GetParameters !insertmacro GetRoot !include "ReplaceInFile.nsh" !include "StrRep.nsh" !include "MUI.nsh" ;=== Program Icon Icon "..\..\App\AppInfo\appicon.ico" ;=== Icon & Stye === !define MUI_ICON "..\..\App\AppInfo\appicon.ico" ;=== Languages !insertmacro MUI_LANGUAGE "English" LangString LauncherFileNotFound ${LANG_ENGLISH} "${PORTABLEAPPNAME} cannot be started. You may wish to re-install to fix this issue. (ERROR: $MISSINGFILEORPATH could not be found)" LangString LauncherAlreadyRunning ${LANG_ENGLISH} "Another instance of ${APPNAME} is already running. Please close other instances of ${APPNAME} before launching ${PORTABLEAPPNAME}." LangString LauncherAskCopyLocal ${LANG_ENGLISH} "${PORTABLEAPPNAME} appears to be running from a location that is read-only. Would you like to temporarily copy it to the local hard drive and run it from there?$\n$\nPrivacy Note: If you say Yes, your personal data within ${PORTABLEAPPNAME} will be temporarily copied to a local drive. Although this copy of your data will be deleted when you close ${PORTABLEAPPNAME}, it may be possible for someone else to access your data later." LangString LauncherNoReadOnly ${LANG_ENGLISH} "${PORTABLEAPPNAME} can not run directly from a read-only location and will now close." Var PROGRAMDIRECTORY Var SETTINGSDIRECTORY Var ADDITIONALPARAMETERS Var EXECSTRING Var PROGRAMEXECUTABLE Var INIPATH Var SECONDARYLAUNCH Var DISABLESPLASHSCREEN Var LASTDRIVE Var CURRENTDRIVE Var MISSINGFILEORPATH 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" "" CheckSubINI StrCpy "$INIPATH" "$EXEDIR" Goto ReadINI CheckSubINI: IfFileExists "$EXEDIR\${NAME}\${NAME}.ini" "" NoINI StrCpy "$INIPATH" "$EXEDIR\${NAME}" Goto ReadINI ReadINI: ;=== Read the parameters from the INI file ReadINIStr $0 "$INIPATH\${NAME}.ini" "${NAME}" "${APPNAME}Directory" StrCpy "$PROGRAMDIRECTORY" "$EXEDIR\$0" ReadINIStr $0 "$INIPATH\${NAME}.ini" "${NAME}" "SettingsDirectory" StrCpy "$SETTINGSDIRECTORY" "$EXEDIR\$0" ;=== Check that the above required parameters are present IfErrors NoINI ReadINIStr $ADDITIONALPARAMETERS "$INIPATH\${NAME}.ini" "${NAME}" "AdditionalParameters" ReadINIStr $DISABLESPLASHSCREEN "$INIPATH\${NAME}.ini" "${NAME}" "DisableSplashScreen" ;CleanUpAnyErrors: ;=== Any missing unrequired INI entries will be an empty string, ignore associated errors ClearErrors ;=== Correct PROGRAMEXECUTABLE if blank StrCmp $PROGRAMEXECUTABLE "" "" EndINI StrCpy "$PROGRAMEXECUTABLE" "${DEFAULTEXE}" Goto EndINI NoINI: ;=== No INI file, so we'll use the defaults StrCpy "$ADDITIONALPARAMETERS" "" StrCpy "$PROGRAMEXECUTABLE" "${DEFAULTEXE}" IfFileExists "$EXEDIR\App\${DEFAULTAPPDIR}\${DEFAULTEXE}" "" NoProgramEXE StrCpy "$PROGRAMDIRECTORY" "$EXEDIR\App\${DEFAULTAPPDIR}" StrCpy "$SETTINGSDIRECTORY" "$EXEDIR\Data\settings" GoTo EndINI EndINI: IfFileExists "$PROGRAMDIRECTORY\$PROGRAMEXECUTABLE" FoundProgramEXE NoProgramEXE: ;=== Program executable not where expected StrCpy $MISSINGFILEORPATH $PROGRAMEXECUTABLE MessageBox MB_OK|MB_ICONEXCLAMATION `$(LauncherFileNotFound)` Abort FoundProgramEXE: ;=== Check if running StrCmp $SECONDARYLAUNCH "true" GetPassedParameters FindProcDLL::FindProc "${DEFAULTEXE}" StrCmp $R0 "1" WarnAnotherInstance DisplaySplash WarnAnotherInstance: MessageBox MB_OK|MB_ICONINFORMATION `$(LauncherAlreadyRunning)` Abort DisplaySplash: StrCmp $DISABLESPLASHSCREEN "true" GetPassedParameters ;=== Show the splash screen while processing registry entries InitPluginsDir File /oname=$PLUGINSDIR\splash.jpg "${NAME}.jpg" newadvsplash::show /NOUNLOAD 1000 100 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 "" SettingsDirectory ;=== Additional Parameters StrCpy $EXECSTRING `$EXECSTRING $ADDITIONALPARAMETERS` SettingsDirectory: ;=== Set the settings directory if we have a path IfFileExists "$SETTINGSDIRECTORY\*.*" LaunchNow CreateDirectory $SETTINGSDIRECTORY LaunchNow: SetOutPath $SETTINGSDIRECTORY ExecWait $EXECSTRING CheckRunning: Sleep 1000 FindProcDLL::FindProc "${DEFAULTEXE}" StrCmp $R0 "1" CheckRunning TheEnd LaunchAndExit: SetOutPath $SETTINGSDIRECTORY Exec $EXECSTRING TheEnd: newadvsplash::stop /WAIT SectionEndInsert original signature here with Greasemonkey Script.
...Um, whut 'dat?...
"I don't hate cats...as long as they stay on the freeway, where they belong."
- Brad Stine
Lifehacker.com
May the Shwartz be with you
wouldn't it be easier to modify the actual app, instead of making a launcher? that's what i did, and if you wan't me to release it, by all means ask.
But there’s no sense crying over every mistake,
You just keep on trying till you run out of cake.
That would be cool. Could you?
May the Shwartz be with you
ok, done at http://taneth111.co.cc
btw, this is modified to sit in the top level directory, not app\dropcloth.
But there’s no sense crying over every mistake,
You just keep on trying till you run out of cake.
...rather not, thx.
I'd prefer the poster tell us what the proggy is.
I'm kinda funny that way...............
"I don't hate cats...as long as they stay on the freeway, where they belong."
- Brad Stine
Taken from the website.
"Dropcloth is a simple application that overlays a solid colored window on top of your desktop. Especially handy for clearing your desktop for screenshots and screencasts, or just getting rid of all the distraction in front of you so that you can focus on just one application without closing out of anything or clearing off your desktop."
"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning." - Rick Cook