I'm working on a launcher that will create file associations for .ssk and .sti files. I can't seem to get the registry to work though. Everytime I go through the Replace in file command it messes up the .reg file. It goes up from a couple KB's to 800 and tells me only binary data can be put into the registry. If anybody could help I'd appreciate it. My code is:
Outfile ..\..\StickiesPortable.exe
Name Stickies Portable
Icon "..\..\App\AppInfo\appicon.ico"
SilentInstall Silent
AutoCloseWindow True
RequestExecutionLevel user
!include "FileFunc.nsh"
!include "ReplaceInFile.nsh"
!include "Registry.nsh"
!include "StrRep.nsh"
!insertmacro GetRoot
Var APPDIR
Var DDATA
Var SETDIR
Section Main
DefineVariables:
StrCpy "$APPDIR" "$EXEDIR\App\Stickies"
StrCpy "$DDATA" "$EXEDIR\App\DefaultData"
StrCpy "$SETDIR" "$EXEDIR\Data\Settings"
CheckStickies.ini:
IfFileExists "$SETDIR\stickies.ini" CheckPortable.ini
CopyFiles "$DDATA\stickies.ini" "$SETDIR\stickies.ini"
CheckPortable.ini:
IfFileExists "$SETDIR\StickiesPortable.ini" CheckSplash
CopyFiles "$DDATA\StickiesPortable.ini" "$SETDIR\StickiesPortable.ini"
CheckSplash:
ReadINIStr $0 "$SETDIR\StickiesPortable.ini" "Settings" "DisplaySplash"
StrCmp $0 "false" UpdatePaths
ShowSplash:
newadvsplash::show /NOUNLOAD 1200 0 0 -1 /L "$EXEDIR\Other\Source\stickies portable.jpg"
UpdatePaths:
${GetRoot} $EXEDIR $1
ReadINIStr $2 "$SETDIR\StickiesPortable.ini" "Settings" "LastDrive"
${ReplaceInFile} "$SETDIR\stickies.ini" "$2" "$1"
${ReplaceInFile} "$SETDIR\StickiesPortable.ini" "$2" "$1"
${ReplaceInFile} "$SETDIR\Stickies.reg" "$2" "$1"
${registry::RestoreKey} "$SETDIR\Stickies.reg" $R2
${registry::RestoreKey} "$SETDIR\StickyExtentions.reg" $R1
Delete "$SETDIR\Stickies.reg.old"
Delete "$SETDIR\stickies.ini.old"
Delete "$SETDIR\StickiesPortable.ini.old"
MoveFiles:
Rename "$SETDIR\stickies.ini" "$APPDIR\stickies.ini"
Rename "$SETDIR\StickiesPortable.ini" "$APPDIR\StickiesPortable.ini"
Rename "$EXEDIR\Data\store.mdb" "$APPDIR\store.mdb"
LaunchApp:
SetOutPath "$APPDIR\"
Sleep 1000
ExecWait "$APPDIR\stickies.exe"
CheckRunning:
Sleep 1000
FindProcDLL::FindProc "${DEFAULTEXE}"
StrCmp $R0 "1" CheckRunning
MoveFilesBack:
Sleep 500
Rename "$APPDIR\stickies.ini" "$SETDIR\stickies.ini"
Rename "$APPDIR\StickiesPortable.ini" "$SETDIR\StickiesPortable.ini"
Rename "$APPDIR\store.mdb" "$EXEDIR\Data\store.mdb"
Sleep 500
DeleteRegKey HKCR ".ssk"
DeleteRegKey HKCR ".sti"
DeleteRegKey HKCR "stickyfile"
DeleteRegKey HKCR "stickyskin"
TheEnd:
newadvsplash::stop /WAIT
SectionEndThe Registry Key Includes:
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Stickyfile] [HKEY_CLASSES_ROOT\Stickyfile\DefaultIcon] @="F:\\PortableApps\\StickiesPortable\\App\\Stickies\\stickies.exe,5" [HKEY_CLASSES_ROOT\Stickyfile\shell] @="open" [HKEY_CLASSES_ROOT\Stickyfile\shell\open] [HKEY_CLASSES_ROOT\Stickyfile\shell\open\command] @="\"F:\\PortableApps\\StickiesPortable\\App\\Stickies\\stickies.exe\" \"%1\"" [HKEY_CLASSES_ROOT\StickySkin] [HKEY_CLASSES_ROOT\StickySkin\DefaultIcon] @="F:\\PortableApps\\StickiesPortable\\App\\Stickies\\stickies.exe,2" [HKEY_CLASSES_ROOT\StickySkin\shell] @="open" [HKEY_CLASSES_ROOT\StickySkin\shell\open] [HKEY_CLASSES_ROOT\StickySkin\shell\open\command] @="\"F:\\PortableApps\\StickiesPortable\\App\\Stickies\\stickies.exe\" \"%1\""
Can you post the contents of your reg file? Also, are you sure the file isn't unicode? If you made it yourself, make sure you exported it as a Win9x/NT4 Reg file.
One quick fix -
There shouldn't be a trailing slash after the path.
I was the way I was creating the .reg file. I wasn't exporting it right. Also thanks for the type on the SetOutPath.
Release Team Member