Could anyone please tell me how to redirect
"C:\Documents and Settings\HOME PC\Application Data\Artweaver" using nsis? because I want those settings to be stored in the "Data" directory of the app, which I am trying to make portable.
thx in advance
edit: because subject was not very clear
Edit 2: I am trying to make my question clearer: how does a portable app handle the program which writes to "application data"? and how does it delete them and then get them to the "data" directory on the USB or so? could someone please show me the code?
You'll have to be very advanced to redirect.
I just do copyfiles then delete (rename doesn't work between drives).
And Backup, also.
Insert original signature here with Greasemonkey Script.
which part of the program launchers does that??? could you please show me the code?
This goes after
CheckForSettings:Backup: Rename "$APPDATA\appnamefolder" "$APPDATA\appnamefolderbackupbyappnameportable" MoveSettings: CreateDirectory "$APPDATA\appnamefolder" CopyFiles /SILENT "$SETTINGSDIRECTORY\appnamefolder\*.*" "$APPDATA\appnamefolder" Delete "$SETTINGSDIRECTORY\appnamefolder\*.*"And before
LaunchAndExit:Just remember to fix appname and appnamefolder with the name of the base 'List of Instructions' :P.
Insert original signature here with Greasemonkey Script.
It still does not redirect, I hope you can help me to find the mistake:
;Copyright (C) 2004-2008 John T. Haller ;Website: http://PortableApps.com/ArtweaverPortable ;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 "Artweaver Portable" !define NAME "ArtweaverPortable" !define APPNAME "Artweaver" !define VER "1.5.5.0" !define WEBSITE "PortableApps.com/ArtweaverPortable" !define DEFAULTEXE "Artweaver.exe" !define DEFAULTAPPDIR "Artweaver" !define DEFAULTSETTINGSPATH "settings" ;=== 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 !include "Registry.nsh" !include "GetParameters.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 DISABLESPLASHSCREEN Var ISDEFAULTDIRECTORY Var SECONDARYLAUNCH Var FAILEDTORESTOREKEY Var MISSINGFILEORPATH 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 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 $0 "$INIPATH\${NAME}.ini" "${NAME}" "AdditionalParameters" StrCpy "$ADDITIONALPARAMETERS" $0 ReadINIStr $0 "$INIPATH\${NAME}.ini" "${NAME}" "${APPNAME}Executable" StrCpy "$PROGRAMEXECUTABLE" $0 ReadINIStr $0 "$INIPATH\${NAME}.ini" "${NAME}" "DisableSplashScreen" StrCpy "$DISABLESPLASHSCREEN" $0 ;CleanUpAnyErrors: ;=== Any missing unrequired INI entries will be an empty string, ignore associated errors ClearErrors ;=== 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\*.*" SettingsFound ;=== No settings found StrCmp $ISDEFAULTDIRECTORY "true" CopyDefaultSettings CreateDirectory $SETTINGSDIRECTORY Goto SettingsFound Backup: Rename "$APPDATA\appnamefolder" "$APPDATA\ArtweaverbackupbyArtweaverportable" MoveSettings: CreateDirectory "$APPDATA\Artweaver" CopyFiles /SILENT "$SETTINGSDIRECTORY\Artweaver\*.*" "$APPDATA\Artweaver" Delete "$SETTINGSDIRECTORY\Artweaver\*.*" CopyDefaultSettings: CreateDirectory "$EXEDIR\Data" CreateDirectory "$EXEDIR\Data\settings" CopyFiles /SILENT $EXEDIR\App\DefaultData\settings\*.* $EXEDIR\Data\settings GoTo SettingsFound SettingsFound: StrCmp $DISABLESPLASHSCREEN "true" GetPassedParameters ;=== Show the splash screen before processing the files InitPluginsDir File /oname=$PLUGINSDIR\splash.jpg "${NAME}.jpg" newadvsplash::show /NOUNLOAD 1500 200 0 -1 /L $PLUGINSDIR\splash.jpg 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 "" RegistryBackup ;=== Additional Parameters StrCpy $EXECSTRING `$EXECSTRING $ADDITIONALPARAMETERS` RegistryBackup: StrCmp $SECONDARYLAUNCH "true" LaunchAndExit ;=== Backup the registry ${registry::KeyExists} "HKU\S-1-5-21-3980898223-2580436373-2252194214-1005\Software\Artweaver-BackupByArtweaverPortable" $R0 StrCmp $R0 "0" RestoreTheKey ${registry::KeyExists} "HKU\S-1-5-21-3980898223-2580436373-2252194214-1005\Software\Artweaver" $R0 StrCmp $R0 "-1" RestoreTheKey ${registry::MoveKey} "HKU\S-1-5-21-3980898223-2580436373-2252194214-1005\Software\Artweaver" "HKU\S-1-5-21-3980898223-2580436373-2252194214-1005\Software\Artweaver-BackupByArtweaverPortable" $R0 Sleep 100 RestoreTheKey: IfFileExists "$SETTINGSDIRECTORY\Artweaver_portable.reg" "" LaunchNow IfFileExists "$WINDIR\system32\reg.exe" "" RestoreTheKey9x nsExec::ExecToStack `"$WINDIR\system32\reg.exe" import "$SETTINGSDIRECTORY\Artweaver_portable.reg"` Pop $R0 StrCmp $R0 '0' LaunchNow ;successfully restored key RestoreTheKey9x: ${registry::RestoreKey} "$SETTINGSDIRECTORY\Artweaver_portable.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} "HKU\S-1-5-21-3980898223-2580436373-2252194214-1005\Software\Artweaver" "$SETTINGSDIRECTORY\Artweaver_portable.reg" "" $0 Sleep 100 SetOriginalKeyBack: ${registry::DeleteKey} "HKU\S-1-5-21-3980898223-2580436373-2252194214-1005\Software\Artweaver" $R0 Sleep 100 ${registry::KeyExists} "HKU\S-1-5-21-3980898223-2580436373-2252194214-1005\Software\Artweaver-BackupByArtweaverPortable" $R0 StrCmp $R0 "-1" TheEnd ${registry::MoveKey} "HKU\S-1-5-21-3980898223-2580436373-2252194214-1005\Software\Artweaver-BackupByArtweaverPortable" "HKU\S-1-5-21-3980898223-2580436373-2252194214-1005\Software\Artweaver" $R0 Sleep 100 Goto TheEnd CopyFiles /SILENT "$APPDATA\Artweaver\*.*" "$SETTINGSDIRECTORY\Artweaver" RMDIR /r "$APPDATA\Artweaver" IfFileExists "$APPDATA\ArtweaverbackupbyArtweaverportable" +1 TheEnd Rename "$APPDATA\ArtweaverbackupbyArtweaverportable" "$APPDATA\Artweaverfolder" LaunchAndExit: Exec $EXECSTRING TheEnd: ${registry::Unload} newadvsplash::stop /WAIT SectionEndThx for your help
Instead of HKU\{blablabla1234567}\software\blabla, you do HKCU\software\blabla ;).
And change the copyrights to PortableApps.com and Contributors in the !define
I can't figure it out yet :P.
Insert original signature here with Greasemonkey Script.
Once the launcher EXE is created, this is what is written at the end of the compiling process
2 warnings:
label "Backup" not used
label "MoveSettings" not used
For some reason it is ignoring the code you gave me
it just means that you created two labels Backup and MoveSettings but have not used the GOTO statement to jump to them
ok I have used the GOTO statement but still it does not redirect those files
the code now
!define PORTABLEAPPNAME "Artweaver Portable" !define NAME "ArtweaverPortable" !define APPNAME "Artweaver" !define VER "1.5.5.0" !define WEBSITE "PortableApps.com/ArtweaverPortable" !define DEFAULTEXE "Artweaver.exe" !define DEFAULTAPPDIR "Artweaver" !define DEFAULTSETTINGSPATH "settings" ;=== 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 "Registry.nsh" !include "GetParameters.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 DISABLESPLASHSCREEN Var ISDEFAULTDIRECTORY Var SECONDARYLAUNCH Var FAILEDTORESTOREKEY Var MISSINGFILEORPATH 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 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 $0 "$INIPATH\${NAME}.ini" "${NAME}" "AdditionalParameters" StrCpy "$ADDITIONALPARAMETERS" $0 ReadINIStr $0 "$INIPATH\${NAME}.ini" "${NAME}" "${APPNAME}Executable" StrCpy "$PROGRAMEXECUTABLE" $0 ReadINIStr $0 "$INIPATH\${NAME}.ini" "${NAME}" "DisableSplashScreen" StrCpy "$DISABLESPLASHSCREEN" $0 ;CleanUpAnyErrors: ;=== Any missing unrequired INI entries will be an empty string, ignore associated errors ClearErrors ;=== 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\*.*" SettingsFound ;=== No settings found StrCmp $ISDEFAULTDIRECTORY "true" CopyDefaultSettings CreateDirectory $SETTINGSDIRECTORY Goto Backup Backup: Rename "$APPDATA\appnamefolder" "$APPDATA\ArtweaverbackupbyArtweaverportable" Goto MoveSettings MoveSettings: CreateDirectory "$APPDATA\Artweaver" CopyFiles /SILENT "$SETTINGSDIRECTORY\Artweaver\*.*" "$APPDATA\Artweaver" Delete "$SETTINGSDIRECTORY\Artweaver\*.*" Goto SettingsFound CopyDefaultSettings: CreateDirectory "$EXEDIR\Data" CreateDirectory "$EXEDIR\Data\settings" CopyFiles /SILENT $EXEDIR\App\DefaultData\settings\*.* $EXEDIR\Data\settings GoTo SettingsFound SettingsFound: StrCmp $DISABLESPLASHSCREEN "true" GetPassedParameters ;=== Show the splash screen before processing the files InitPluginsDir File /oname=$PLUGINSDIR\splash.jpg "${NAME}.jpg" newadvsplash::show /NOUNLOAD 1500 200 0 -1 /L $PLUGINSDIR\splash.jpg 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 "" RegistryBackup ;=== Additional Parameters StrCpy $EXECSTRING `$EXECSTRING $ADDITIONALPARAMETERS` RegistryBackup: StrCmp $SECONDARYLAUNCH "true" LaunchAndExit ;=== Backup the registry ${registry::KeyExists} "HKCU\Software\Artweaver-BackupByArtweaverPortable" $R0 StrCmp $R0 "0" RestoreTheKey ${registry::KeyExists} "HKCU\Software\Artweaver" $R0 StrCmp $R0 "-1" RestoreTheKey ${registry::MoveKey} "HKCU\Software\Artweaver" "HKCU\Software\Artweaver-BackupByArtweaverPortable" $R0 Sleep 100 RestoreTheKey: IfFileExists "$SETTINGSDIRECTORY\Artweaver_portable.reg" "" LaunchNow IfFileExists "$WINDIR\system32\reg.exe" "" RestoreTheKey9x nsExec::ExecToStack `"$WINDIR\system32\reg.exe" import "$SETTINGSDIRECTORY\Artweaver_portable.reg"` Pop $R0 StrCmp $R0 '0' LaunchNow ;successfully restored key RestoreTheKey9x: ${registry::RestoreKey} "$SETTINGSDIRECTORY\Artweaver_portable.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} "HKCU\Software\Artweaver" "$SETTINGSDIRECTORY\Artweaver_portable.reg" "" $0 Sleep 100 SetOriginalKeyBack: ${registry::DeleteKey} "HKCU\Software\Artweaver" $R0 Sleep 100 ${registry::KeyExists} "HKCU\Software\Artweaver-BackupByArtweaverPortable" $R0 StrCmp $R0 "-1" TheEnd ${registry::MoveKey} "HKCU\Software\Artweaver-BackupByArtweaverPortable" "HKCU\Software\Artweaver" $R0 CopyFiles /SILENT "$APPDATA\Artweaver\*.*" "$SETTINGSDIRECTORY\Artweaver" RMDIR /r "$APPDATA\Artweaver" IfFileExists "$APPDATA\ArtweaverbackupbyArtweaverportable" +1 TheEnd Rename "$APPDATA\ArtweaverbackupbyArtweaverportable" "$APPDATA\Artweaverfolder" Goto TheEnd Sleep 100 LaunchAndExit: Exec $EXECSTRING TheEnd: ${registry::Unload} newadvsplash::stop /WAIT SectionEndfirst of all you dont need Goto Backup and Goto MoveSettings as the labels are just next to the statements you can delete both the label and the statements.
i once made one application portable which wrote to the application data folder
what i did was let the application write all its settings to $APPDATA then when the program exits copy all the files form $APPDATA to $EXEDIR\DATA (
Var SETTINGSDIRECTORY StrCpy $SETTINGSDIRECTORY "$EXEDIR\Data" System::Call 'Kernel32::SetEnvironmentVariableA(t, t) i("APPDATA", "$SETTINGSDIRECTORY").r0'This will make the APPDATA(Application Data) folder be your $EXEDIR\Data folder.
Now for the ArtWeaver App, all the files that are usually written to the APPDATA folder will be written to the $EXEDIR\Data folder
I hope that helps
Please search before posting. ~Thanks
These are the files I want the programm to redirect, I hinbk there is where my problem lies:
C:\Documents and Settings\HOME PC\Application Data\Artweaver\0.4\Brush Settings Cache
C:\Documents and Settings\HOME PC\Application Data\Artweaver\0.4\Plug-In Cache
C:\Documents and Settings\HOME PC\Application Data\Artweaver\0.4\Preview Image Cache
C:\Documents and Settings\HOME PC\Application Data\Artweaver\0.4\Current Session
C:\Documents and Settings\HOME PC\Application Data\Artweaver\0.4\Color Sets.aco
I basically want to redirect the whole folder "artweaver" instead of the folder "0.4" which is where all the other files are located in.
(maybe this is why the codes didn't work??)
but my launcher is able to redirect the registry keys.
(my mean the same way as the other portable launcher do)
try it
Please search before posting. ~Thanks
I tried your code and its the same, it does not redirect the files
the code:
!define PORTABLEAPPNAME "Artweaver Portable" !define NAME "ArtweaverPortable" !define APPNAME "Artweaver" !define VER "1.5.5.0" !define WEBSITE "PortableApps.com/ArtweaverPortable" !define DEFAULTEXE "Artweaver.exe" !define DEFAULTAPPDIR "Artweaver" !define DEFAULTSETTINGSPATH "settings" ;=== 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 !include "Registry.nsh" !include "GetParameters.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 DISABLESPLASHSCREEN Var ISDEFAULTDIRECTORY Var SECONDARYLAUNCH Var FAILEDTORESTOREKEY Var MISSINGFILEORPATH 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 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 $0 "$INIPATH\${NAME}.ini" "${NAME}" "AdditionalParameters" StrCpy "$ADDITIONALPARAMETERS" $0 ReadINIStr $0 "$INIPATH\${NAME}.ini" "${NAME}" "${APPNAME}Executable" StrCpy "$PROGRAMEXECUTABLE" $0 ReadINIStr $0 "$INIPATH\${NAME}.ini" "${NAME}" "DisableSplashScreen" StrCpy "$DISABLESPLASHSCREEN" $0 ;CleanUpAnyErrors: ;=== Any missing unrequired INI entries will be an empty string, ignore associated errors ClearErrors ;=== 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\*.*" SettingsFound ;=== No settings found StrCmp $ISDEFAULTDIRECTORY "true" CopyDefaultSettings CreateDirectory $SETTINGSDIRECTORY GoTo VarSETTINGSDIRECTORY VarSETTINGSDIRECTORY: StrCpy $SETTINGSDIRECTORY "$EXEDIR\Data" System::Call 'Kernel32::SetEnvironmentVariableA(t, t) i("APPDATA", "$SETTINGSDIRECTORY").r0' GoTo SettingsFound CopyDefaultSettings: CreateDirectory "$EXEDIR\Data" CreateDirectory "$EXEDIR\Data\settings" CopyFiles /SILENT $EXEDIR\App\DefaultData\settings\*.* $EXEDIR\Data\settings GoTo SettingsFound SettingsFound: StrCmp $DISABLESPLASHSCREEN "true" GetPassedParameters ;=== Show the splash screen before processing the files InitPluginsDir File /oname=$PLUGINSDIR\splash.jpg "${NAME}.jpg" newadvsplash::show /NOUNLOAD 1500 200 0 -1 /L $PLUGINSDIR\splash.jpg 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 "" RegistryBackup ;=== Additional Parameters StrCpy $EXECSTRING `$EXECSTRING $ADDITIONALPARAMETERS` RegistryBackup: StrCmp $SECONDARYLAUNCH "true" LaunchAndExit ;=== Backup the registry ${registry::KeyExists} "HKCU\Software\Artweaver-BackupByArtweaverPortable" $R0 StrCmp $R0 "0" RestoreTheKey ${registry::KeyExists} "HKCU\Software\Artweaver" $R0 StrCmp $R0 "-1" RestoreTheKey ${registry::MoveKey} "HKCU\Software\Artweaver" "HKCU\Software\Artweaver-BackupByArtweaverPortable" $R0 Sleep 100 RestoreTheKey: IfFileExists "$SETTINGSDIRECTORY\Artweaver_portable.reg" "" LaunchNow IfFileExists "$WINDIR\system32\reg.exe" "" RestoreTheKey9x nsExec::ExecToStack `"$WINDIR\system32\reg.exe" import "$SETTINGSDIRECTORY\Artweaver_portable.reg"` Pop $R0 StrCmp $R0 '0' LaunchNow ;successfully restored key RestoreTheKey9x: ${registry::RestoreKey} "$SETTINGSDIRECTORY\Artweaver_portable.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} "HKCU\Software\Artweaver" "$SETTINGSDIRECTORY\Artweaver_portable.reg" "" $0 Sleep 100 SetOriginalKeyBack: ${registry::DeleteKey} "HKCU\Software\Artweaver" $R0 Sleep 100 ${registry::KeyExists} "HKCU\Software\Artweaver-BackupByArtweaverPortable" $R0 StrCmp $R0 "-1" TheEnd ${registry::MoveKey} "HKCU\Software\Artweaver-BackupByArtweaverPortable" "HKCU\Software\Artweaver" $R0 Sleep 100 CopyFiles /SILENT "$APPDATA\Artweaver\*.*" "$SETTINGSDIRECTORY\Artweaver" RMDIR /r "$APPDATA\Artweaver" IfFileExists "$APPDATA\ArtweaverbackupbyArtweaverportable" +1 TheEnd Rename "$APPDATA\ArtweaverbackupbyArtweaverportable" "$APPDATA\Artweaverfolder" Goto TheEnd LaunchAndExit: Exec $EXECSTRING TheEnd: ${registry::Unload} newadvsplash::stop /WAIT SectionEndEDIT: I think I misunderstood what your code should do,
should your code only delete the folder created in "application Data"
OR Should your code delete the "Application Data" and then move the files created in there to the data folder of the portableapp?
Actually, so is tipra.wicked:
You have the following
Gotoand label right next to each other, and the label isn't called from anywhere else; they can both be deleted:GoTo VarSETTINGSDIRECTORY VarSETTINGSDIRECTORY:More importantly, however, powerjuce's code ended up in a place where it won't get executed unless the executable is not found in the default location ($EXEDIR\App\${DEFAULTAPPDIR}\${DEFAULTEXE}). The code should go right under the
SettingsFound:label. Also, since you're using both the Data directory (to store %APPDATA%\Artweaver) and Data\settings (for the registry snapshot), I'd recommend you keep them separate. So, replace this:StrCpy $SETTINGSDIRECTORY "$EXEDIR\Data" System::Call 'Kernel32::SetEnvironmentVariableA(t, t) i("APPDATA", "$SETTINGSDIRECTORY").r0'with this:
System::Call 'Kernel32::SetEnvironmentVariableA(t, t) i("APPDATA", "$EXEDIR\Data").r0'You'll probably notice a spare
If you're adventurous, you can delete the useless
Gotoright above theSettingsFound:label.Gotobut leave the label where it is.Don't forget to remove your previous APPDATA logic:
BTW, for the above file-moving logic to work, there has to be a corresponding block of code to move it the other direction before launching the app. There shouldn't be a need to bother with it though -- powerjuce has you covered.
Hope this helps. -hea
<EDIT>
In case you were wondering, setting the %APPDATA% environment variable before launching the app tells it that's where it's supposed to store its stuff. That's why you don't have to worry about moving the files back and forth. If you already have an Artweaver profile in your APPDATA folder and you want to use it, simply use Explorer to drag it to the ArtweaverPortable\Data folder while the application isn't running.
</EDIT>
so if I did it right, what you told me to do, my code looks like this:
!define PORTABLEAPPNAME "Artweaver Portable" !define NAME "ArtweaverPortable" !define APPNAME "Artweaver" !define VER "1.5.5.0" !define WEBSITE "PortableApps.com/ArtweaverPortable" !define DEFAULTEXE "Artweaver.exe" !define DEFAULTAPPDIR "Artweaver" !define DEFAULTSETTINGSPATH "settings" ;=== 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 !include "Registry.nsh" !include "GetParameters.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 DISABLESPLASHSCREEN Var ISDEFAULTDIRECTORY Var SECONDARYLAUNCH Var FAILEDTORESTOREKEY Var MISSINGFILEORPATH 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 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 $0 "$INIPATH\${NAME}.ini" "${NAME}" "AdditionalParameters" StrCpy "$ADDITIONALPARAMETERS" $0 ReadINIStr $0 "$INIPATH\${NAME}.ini" "${NAME}" "${APPNAME}Executable" StrCpy "$PROGRAMEXECUTABLE" $0 ReadINIStr $0 "$INIPATH\${NAME}.ini" "${NAME}" "DisableSplashScreen" StrCpy "$DISABLESPLASHSCREEN" $0 ;CleanUpAnyErrors: ;=== Any missing unrequired INI entries will be an empty string, ignore associated errors ClearErrors ;=== 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\*.*" SettingsFound ;=== 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: System::Call 'Kernel32::SetEnvironmentVariableA(t, t) i("APPDATA", "$EXEDIR\Data").r0' StrCmp $DISABLESPLASHSCREEN "true" GetPassedParameters ;=== Show the splash screen before processing the files InitPluginsDir File /oname=$PLUGINSDIR\splash.jpg "${NAME}.jpg" newadvsplash::show /NOUNLOAD 1500 200 0 -1 /L $PLUGINSDIR\splash.jpg 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 "" RegistryBackup ;=== Additional Parameters StrCpy $EXECSTRING `$EXECSTRING $ADDITIONALPARAMETERS` RegistryBackup: StrCmp $SECONDARYLAUNCH "true" LaunchAndExit ;=== Backup the registry ${registry::KeyExists} "HKCU\Software\Artweaver-BackupByArtweaverPortable" $R0 StrCmp $R0 "0" RestoreTheKey ${registry::KeyExists} "HKCU\Software\Artweaver" $R0 StrCmp $R0 "-1" RestoreTheKey ${registry::MoveKey} "HKCU\Software\Artweaver" "HKCU\Software\Artweaver-BackupByArtweaverPortable" $R0 Sleep 100 RestoreTheKey: IfFileExists "$SETTINGSDIRECTORY\Artweaver_portable.reg" "" LaunchNow IfFileExists "$WINDIR\system32\reg.exe" "" RestoreTheKey9x nsExec::ExecToStack `"$WINDIR\system32\reg.exe" import "$SETTINGSDIRECTORY\Artweaver_portable.reg"` Pop $R0 StrCmp $R0 '0' LaunchNow ;successfully restored key RestoreTheKey9x: ${registry::RestoreKey} "$SETTINGSDIRECTORY\Artweaver_portable.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} "HKCU\Software\Artweaver" "$SETTINGSDIRECTORY\Artweaver_portable.reg" "" $0 Sleep 100 SetOriginalKeyBack: ${registry::DeleteKey} "HKCU\Software\Artweaver" $R0 Sleep 100 ${registry::KeyExists} "HKCU\Software\Artweaver-BackupByArtweaverPortable" $R0 StrCmp $R0 "-1" TheEnd ${registry::MoveKey} "HKCU\Software\Artweaver-BackupByArtweaverPortable" "HKCU\Software\Artweaver" $R0 CopyFiles /SILENT "$APPDATA\Artweaver\*.*" "$SETTINGSDIRECTORY\Artweaver" RMDIR /r "$APPDATA\Artweaver" IfFileExists "$APPDATA\ArtweaverbackupbyArtweaverportable" +1 TheEnd Rename "$APPDATA\ArtweaverbackupbyArtweaverportable" "$APPDATA\Artweaverfolder" Sleep 100 LaunchAndExit: Exec $EXECSTRING TheEnd: ${registry::Unload} newadvsplash::stop /WAIT SectionEndthis does delete the files created from "application data"
I am getting interested and would like to know how does firefox redirect its files to "data/profile" then?, because I think that wopuld solve my problem
I think it uses a command line parameter at FF. Not Sure.
Insert original signature here with Greasemonkey Script.
firefox takes a parameter called -profile
in the launcher that is wat john uses to redirect the profile
Please search before posting. ~Thanks
I seem to recall saying something along the lines of ...
I haven't checked to see if
Kernel32::SetEnvironmentVariableAautomatically updates NSIS' local copy.If [YES], the above code will move the configuration stuff that you just told Artweaver to save on your portable drive in its default subfolder (Data\ArtWeaver) to a different location (Data\Settings\ArtWeaver). (If that's where you wanted it, it's easier to set the APPDATA variable accordingly and avoid the costly copy-and-delete.) On the next launch of ArtWeaver, it won't find its stuff (because you moved it!) and will probably want to create a new profile again.
If [NOT], the code will move the old saved data from your PC's APPDATA directory to Data\Settings\ArtWeaver on your portable drive (still not where the APPDATA told the app it would be).
Either way, the last two lines check for and potentially rename a file/directory that isn't created or referenced elsewhere in the script. Probably doesn't hurt anything, but it's probably not very useful either.
Now, as far as Firefox and other portable-friendly apps go, some have command-line switches that tell them to store everything they normally would spread out all over your machine (APPDATA, registry, bogus folders under Program Files, etc.) under a single directory that you specify on the command-line. Some apps behave well for files, but leave crap in the regisrty; others automatically switch to an INI or REG file and leave the registry clean, but still leave their files scattered wherever they please. So, the "right" way to handle the app is to get it to be as helpful as it can be and then work around the areas the developers didn't handle.
So, if an app writes to APPDATA and the registry, and has a /portable switch that makes it use INI files instead of the registry, you can probably close the deal by using the APPDATA trick that powerjuce showed you. If an app insists on using the registry, then you have to resort to backing up and restoring the keys that are needed by or clobbered during a run of your portable version.
In Firefox's case, its -profile switch handles both registry behavior and APPDATA, so it's actually very well-behaved. The problem then becomes that Firefox components are TOO aware of where their all-in-one profile directory is. The genius of John's launcher is that it cleans up all the internal URI references and config files whenever you bork them by moving your portable drive and getting assigned a different drive letter.
-hea
I think I just leave it as it is is, but thanks for all your suggestions, codes and help
THANK YOU! @all
THANKS FOR THAT
TY TY TY TY TY TY TY TY TY TY TY TY
(ok im done ;))
Na na na, come on!
!define PORTABLEAPPNAME "Artweaver Portable" !define NAME "ArtweaverPortable" !define APPNAME "Artweaver" !define VER "1.5.5.0" !define WEBSITE "PortableApps.com/ArtweaverPortable" !define DEFAULTEXE "Artweaver.exe" !define DEFAULTAPPDIR "Artweaver" !define DEFAULTSETTINGSPATH "settings" ;=== 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 !include "Registry.nsh" !include "GetParameters.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 DISABLESPLASHSCREEN Var ISDEFAULTDIRECTORY Var SECONDARYLAUNCH Var FAILEDTORESTOREKEY Var MISSINGFILEORPATH 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 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 $0 "$INIPATH\${NAME}.ini" "${NAME}" "AdditionalParameters" StrCpy "$ADDITIONALPARAMETERS" $0 ReadINIStr $0 "$INIPATH\${NAME}.ini" "${NAME}" "${APPNAME}Executable" StrCpy "$PROGRAMEXECUTABLE" $0 ReadINIStr $0 "$INIPATH\${NAME}.ini" "${NAME}" "DisableSplashScreen" StrCpy "$DISABLESPLASHSCREEN" $0 ;CleanUpAnyErrors: ;=== Any missing unrequired INI entries will be an empty string, ignore associated errors ClearErrors ;=== 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\*.*" SettingsFound ;=== No settings found StrCmp $ISDEFAULTDIRECTORY "true" CopyDefaultSettings CreateDirectory $SETTINGSDIRECTORY StrCpy $SETTINGSDIRECTORY "$EXEDIR\Data" System::Call 'Kernel32::SetEnvironmentVariableA(t, t) i("APPDATA", "$SETTINGSDIRECTORY").r0' GoTo SettingsFound CopyDefaultSettings: CreateDirectory "$EXEDIR\Data" CreateDirectory "$EXEDIR\Data\settings" CopyFiles /SILENT "$EXEDIR\App\DefaultData\settings\*.*" "$SETTINGSDIRECTORY" GoTo SettingsFound SettingsFound: StrCmp $DISABLESPLASHSCREEN "true" GetPassedParameters ;=== Show the splash screen before processing the files InitPluginsDir File /oname=$PLUGINSDIR\splash.jpg "${NAME}.jpg" newadvsplash::show /NOUNLOAD 1500 200 0 -1 /L $PLUGINSDIR\splash.jpg 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 "" RegistryBackup ;=== Additional Parameters StrCpy $EXECSTRING `$EXECSTRING $ADDITIONALPARAMETERS` RegistryBackup: StrCmp $SECONDARYLAUNCH "true" LaunchAndExit ;=== Backup the registry ${registry::KeyExists} "HKCU\Software\Artweaver-BackupByArtweaverPortable" $R0 StrCmp $R0 "0" RestoreTheKey ${registry::KeyExists} "HKCU\Software\Artweaver" $R0 StrCmp $R0 "-1" RestoreTheKey ${registry::MoveKey} "HKCU\Software\Artweaver" "HKCU\Software\Artweaver-BackupByArtweaverPortable" $R0 Sleep 100 RestoreTheKey: IfFileExists "$SETTINGSDIRECTORY\Artweaver_portable.reg" "" LaunchNow IfFileExists "$WINDIR\system32\reg.exe" "" RestoreTheKey9x nsExec::ExecToStack `"$WINDIR\system32\reg.exe" import "$SETTINGSDIRECTORY\Artweaver_portable.reg"` Pop $R0 StrCmp $R0 '0' LaunchNow ;successfully restored key RestoreTheKey9x: ${registry::RestoreKey} "$SETTINGSDIRECTORY\Artweaver_portable.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} "HKCU\Software\Artweaver" "$SETTINGSDIRECTORY\Artweaver_portable.reg" "" $0 Sleep 100 SetOriginalKeyBack: ${registry::DeleteKey} "HKCU\Software\Artweaver" $R0 Sleep 100 ${registry::KeyExists} "HKCU\Software\Artweaver-BackupByArtweaverPortable" $R0 StrCmp $R0 "-1" TheEnd ${registry::MoveKey} "HKCU\Software\Artweaver-BackupByArtweaverPortable" "HKCU\Software\Artweaver" $R0 CopyFiles /SILENT "$APPDATA\Artweaver\*.*" "$SETTINGSDIRECTORY" IfFileExists "$APPDATA\Artweaver-backupbyArtweaverportable" +1 Rename "$APPDATA\Artweaver-backupbyArtweaverportable" "$SETTINGSDIRECTORY" RMDIR /r "$APPDATA\Artweaver" Goto TheEnd LaunchAndExit: Exec $EXECSTRING TheEnd: ${registry::Unload} newadvsplash::stop /WAIT SectionEndI just replaced all "$SETTINGSDIRECTORY\Artweaver" which had something to do with moving setting "$SETTINGSDIRECTORY" thatt made the code work, because I think it didnt know where "\Artweaver" was located
to PortableApps.com and Contributors.
And put back the comments in the front (GPL)
Insert original signature here with Greasemonkey Script.
ok I will do that, thx
How would you go about just deleting a folder in ...when it closes?
C:\Documents and Settings\User\Application Data\Avidemux
Lead, Follow, or get out of the way.
At the end put this code in. (replace "PROGRAMMNAME" with your apps name) this will redirect those files to the "Data" directory of the portable app (if you are having the "Data" directory.
This will remoove that direcory of the computer when the launcher exits
(hope it helps) if you need anymore help could you please post the whole code?
well with this i keep getting an error or line 124:CopyFiles /SILENT "$APPDATA\avidemux\*.*" "$SETTINGSDIRECTORY"
In $APPDATA\avidemux there is a folder"custom" and "admlog.txt",folder is empty
do i need to set it to go delete each of those files, or the whole directory? they aren't needed to run or save
settings in avidemux so I don't really need to redirect so much as just delete $APPDATA\avidemux
is there s simpler code to do just that?
My code, based of Tennix!portable:
;Copyright (C) 2004-2008 John T. Haller ;Copyright (C) 2007-2008 Mike Fitzpatrick-Ruth ;Website: https://portableapps.com/AvidemuxPortable ;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 "Avidemux Portable" !define APPNAME "Avidemux!" !define NAME "AvidemuxPortable" !define VER "1.5.7.0" !define WEBSITE "PortableApps.com/AvidemuxPortable" !define DEFAULTEXE "Avidemux.exe" !define DEFAULTAPPDIR "Avidemux" ;=== 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 & Contributers" 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 "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 EXECSTRING Var DISABLESPLASHSCREEN 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 Abort CheckINI: ReadINIStr $DISABLESPLASHSCREEN "$EXEDIR\${NAME}.ini" "${NAME}" "DisableSplashScreen" ClearErrors IfFileExists "$EXEDIR\App\${DEFAULTAPPDIR}\${DEFAULTEXE}" FoundProgramEXE ;NoProgramEXE: ;=== Program executable not where expected StrCpy $MISSINGFILEORPATH $EXEDIR\App\${DEFAULTAPPDIR}\${DEFAULTEXE} MessageBox MB_OK|MB_ICONEXCLAMATION `$(LauncherFileNotFound)` Abort FoundProgramEXE: StrCmp $DISABLESPLASHSCREEN "true" CreateExecString ;=== Show the splash screen while processing registry entries InitPluginsDir File /oname=$PLUGINSDIR\splash.jpg "${NAME}.jpg" newadvsplash::show /NOUNLOAD 1000 0 0 -1 /L $PLUGINSDIR\splash.jpg CreateExecString: StrCpy $EXECSTRING `"$EXEDIR\App\${DEFAULTAPPDIR}\${DEFAULTEXE}"` ;LaunchNow: ExecWait $EXECSTRING CheckRunning: Sleep 1000 FindProcDLL::FindProc "${DEFAULTEXE}" StrCmp $R0 "1" CheckRunning newadvsplash::stop /WAIT SectionEnd SetOriginalKeyBack: CopyFiles /SILENT "$APPDATA\avidemux\*.*" "$SETTINGSDIRECTORY" IfFileExists "$APPDATA\Avidemux-backupbyavidemuxportable" +1 Rename "$APPDATA\Avidemux-backupbyavidemuxportable" "$SETTINGSDIRECTORY" RMDIR /r "$APPDATA\Avidemux" Goto TheEndthank you very much
Lead, Follow, or get out of the way.
;Copyright (C) 2004-2008 John T. Haller ;Copyright (C) 2007-2008 Mike Fitzpatrick-Ruth ;Website: https://portableapps.com/AvidemuxPortable ;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 "Avidemux Portable" !define APPNAME "Avidemux!" !define NAME "AvidemuxPortable" !define VER "1.5.7.0" !define WEBSITE "PortableApps.com/AvidemuxPortable" !define DEFAULTEXE "Avidemux.exe" !define DEFAULTAPPDIR "Avidemux" ;=== 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 & Contributers" 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 "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 EXECSTRING Var DISABLESPLASHSCREEN 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 Abort CheckINI: ReadINIStr $DISABLESPLASHSCREEN "$EXEDIR\${NAME}.ini" "${NAME}" "DisableSplashScreen" ClearErrors IfFileExists "$EXEDIR\App\${DEFAULTAPPDIR}\${DEFAULTEXE}" FoundProgramEXE ;NoProgramEXE: ;=== Program executable not where expected StrCpy $MISSINGFILEORPATH $EXEDIR\App\${DEFAULTAPPDIR}\${DEFAULTEXE} MessageBox MB_OK|MB_ICONEXCLAMATION `$(LauncherFileNotFound)` Abort FoundProgramEXE: StrCmp $DISABLESPLASHSCREEN "true" CreateExecString ;=== Show the splash screen while processing registry entries InitPluginsDir File /oname=$PLUGINSDIR\splash.jpg "${NAME}.jpg" newadvsplash::show /NOUNLOAD 1000 0 0 -1 /L $PLUGINSDIR\splash.jpg CreateExecString: StrCpy $EXECSTRING `"$EXEDIR\App\${DEFAULTAPPDIR}\${DEFAULTEXE}"` ;LaunchNow: ExecWait $EXECSTRING CheckRunning: Sleep 1000 FindProcDLL::FindProc "${DEFAULTEXE}" StrCmp $R0 "1" CheckRunning SetOriginalKeyBack: CopyFiles /SILENT "$APPDATA\avidemux\*.*" "$SETTINGSDIRECTORY" IfFileExists "$APPDATA\Avidemux-backupbyavidemuxportable" +1 Rename "$APPDATA\Avidemux-backupbyavidemuxportable" "$SETTINGSDIRECTORY" RMDIR /r "$APPDATA\Avidemux" Goto TheEnd LaunchAndExit: Exec $EXECSTRING TheEnd: newadvsplash::stop /WAIT SectionEndThe only mistake I found is that you delete the files after the "SecondEnd" Part which means The whole code ends there. (I Think)
You also don't have the "TheEnd" label but direct your label to it to.
Just copy and paste THIS code and try it. If it does not work, please post you code here again.
i used you code exactly and still got nothing
this is the error i get, it still compiles and runs but the $APPDATA doesn't disappear and nothing new in Data
in Avidemux
"4 warnings:
unknown variable/constant "SETTINGSDIRECTORY" detected, ignoring (C:\Documents and Settings\User\Desktop\AvidemuxPortable\Other\Source\AvidemuxPortable.nsi:123)
unknown variable/constant "SETTINGSDIRECTORY" detected, ignoring (C:\Documents and Settings\User\Desktop\AvidemuxPortable\Other\Source\AvidemuxPortable.nsi:125)
label "SetOriginalKeyBack" not used
label "LaunchAndExit" not used"
thanks again
Lead, Follow, or get out of the way.
if you want to know how to move something from $APPDATA look at opera portable that I released, I just used the "Rename" to move from $APPDATA to $SETTINGS because I do not know it environment variable. Oh yeah you can make it so that nothing gets deleted, just moved around. for example you can have appdata go to the DefaultData folder then to $SETTINGS folder and back to DefaultData and back to $APPDATA. I dont know if there is a function that will overwrite the whole folder and files inside, maybe it is CopyFiles /SILENT function.
An eye for an eye makes the whole world blind.
Mahatma Gandhi,
Indian political and spiritual leader (1869 - 1948)
ok thanks, I'm going to do that right now
I'll let you know how it goes
Lead, Follow, or get out of the way.
i figured out why nothing worked, a stupid mistake on my part
there is stuff under $APPDATA, but also , under docs and settings/user, and i was checking there the entire time, and not the $APPDATA folder
you code takes care of the $APPDATA folder, but how can i modify that to take care of Documents and Settings/User/Avidemux
i'm going to start a new post for this here, instead of hijacking this threat further
Lead, Follow, or get out of the way.