hello,
i've created my own nsis installer for my program. but i don't know how to set a registry value with the corresponding version number and installation path.
i plan to add in future for my program an extension. the installer for the extension should check in the registry the path i have set with the main program installer.
The main installer should set these entries:
[HKEY_LOCAL_MACHINE\Software\${APPNAME}\]
"Path"="C:\Program Files\APPNAME"
"Version"="1.0" ;for future patches e.g.
And the installer for the extension should read:
[HKEY_LOCAL_MACHINE\Software\${APPNAME}\]
"Path"="C:\Program Files\APPNAME"
and set automatically on installation the path he found in the registry, to avoid mistakes in choosing the correct installation directory.
cause the customer could choose another install directory in the main installer.
i think i must use "ReadREGDWORD" and "WriteRegDWORD", but i'm not very sure about this. the solution shouldn't be very complex. something easier will do it for myself.
thank you
read/write registry version & $INSTDIR
9 posts
That's too short, could you provide some details about your query?
Originally posted by Red Wineups, sorry for that. when i wrote my text i accidentally press the "enter"-key.
That's too short, could you provide some details about your query?
sorry.
hm,
i think in the main installer i should use:
WriteRegStr HKLM "Software\APPNAME" "Path" "$INSTDIR"
WriteRegStr HKLM "Software\APPNAME" "Version" "${VERSION}"
and the extension installer should use:
ReadRegDWORD $0 HKLM Software\APPNAME Path
this was copied from the nsis user manual
but if this is correct, how to lock and change in the extension installer the installation directory?
i think in the main installer i should use:
WriteRegStr HKLM "Software\APPNAME" "Path" "$INSTDIR"
WriteRegStr HKLM "Software\APPNAME" "Version" "${VERSION}"
and the extension installer should use:
ReadRegDWORD $0 HKLM Software\APPNAME Path
this was copied from the nsis user manual
but if this is correct, how to lock and change in the extension installer the installation directory?
Function .onInit
ReadRegStr $0 HKLM "Software\APPNAME" "Path"
StrCpy $INSTDIR "$0"
........
FunctionEnd
ReadRegStr $0 HKLM "Software\APPNAME" "Path"
StrCpy $INSTDIR "$0"
........
FunctionEnd
No need for using ReadRegStr, you can just use InstallDirRegKey.
Stu
Stu
hi,
sorry guys, but i do some bugfixing stuff on my program first, before i get time for testing the code posted here.
the code you guys have written is perfect for me.
this is how i do it and it is 100% working. i've decided to post the hole code again as i used it, to make it more understandable for others.
In the main installer write:
!define VERSION "1.0"
!define APPNAME "Your Programs Name"
Function .onInstSuccess ;After installation success the installer writes some values to registry
WriteRegStr HKLM "Software\${APPNAME}" "Path" "$INSTDIR"
WriteRegStr HKLM "Software\${APPNAME}" "Version" "${VERSION}"
FunctionEnd
and in the extension installer:
Function .onInit
ReadRegStr $0 HKLM "Software\${APPNAME}" "Path"
StrCpy $INSTDIR "$0"
FunctionEnd
big thanks goes out to all genius guys!
sorry guys, but i do some bugfixing stuff on my program first, before i get time for testing the code posted here.
the code you guys have written is perfect for me.
this is how i do it and it is 100% working. i've decided to post the hole code again as i used it, to make it more understandable for others.
In the main installer write:
!define VERSION "1.0"
!define APPNAME "Your Programs Name"
Function .onInstSuccess ;After installation success the installer writes some values to registry
WriteRegStr HKLM "Software\${APPNAME}" "Path" "$INSTDIR"
WriteRegStr HKLM "Software\${APPNAME}" "Version" "${VERSION}"
FunctionEnd
and in the extension installer:
Function .onInit
ReadRegStr $0 HKLM "Software\${APPNAME}" "Path"
StrCpy $INSTDIR "$0"
FunctionEnd
big thanks goes out to all genius guys!
hi,
there's another problem. i want to compare the version, which is stored in registry, for future patches. i've experiment with some possibilities, but ther is always an error on compiling.
patch installer:
!define NEWVERSION "v1.2"
!define CURRENTVERSION ""
...
...
!include "WordFunc.nsh"
!include "StrFunc.nsh"
${StrStr} ;Activate the StrStr Function
!insertmacro VersionCompare
Section
ReadRegStr $0 HKLM "Software\${APPNAME}" "Version"
StrCpy $CURENTVERSION "$0"
${VersionCompare} "${CURENTVERSION}" "${NEWVERSION}" $R0
${If} $R0 = 0
MessageBox MB_VER "equal"
Abort
${If} $R0 = 1
MessageBox MB_VER "newer"
Abort
${If} $R0 = 2
MessageBox MB_VER "newer"
Abort
SectionEnd
(Example: E.3.16 VersionCompare)
With those code the compiler says:
!insertmacro: end of FUNCTION_STRING_StrStr
!insertmacro: VersionCompare
!insertmacro: end of VersionCompare
Section: ""
ReadRegStr $0 HKLM\Software\APPNAME\Version
Usage: StrCpy $(user_var: output) str [maxlen] [startoffset]
Error in script "stdin" on line 85 -- aborting creation process
without those lines
ReadRegStr $0 HKLM "Software\${APPNAME}" "Version"
StrCpy $CURENTVERSION "$0"
the compiler says:
!insertmacro: end of FUNCTION_STRING_StrStr
!insertmacro: VersionCompare
!insertmacro: end of VersionCompare
Section: ""
!insertmacro: VersionCompareCall
!insertmacro: end of VersionCompareCall
!insertmacro: _If
!insertmacro: end of _If
Usage: MessageBox mode messagebox_text [/SD return] [return_check label_to_goto_if_equal [return_check2 label2]]
mode=modeflag[|modeflag[|modeflag[...]]]
modeflag=(MB_ABORTRETRYIGNORE|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_YESNO|MB_YESNOCANCEL|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_USERICON|MB_TOPMOST|MB_SETFOREGROUND|MB_RIGHT
Error in script "stdin" on line 88 -- aborting creation process
you see there are some bugs, but i don't know how to fix it. i'm not really fit in nsis.
thanks for help
there's another problem. i want to compare the version, which is stored in registry, for future patches. i've experiment with some possibilities, but ther is always an error on compiling.
patch installer:
!define NEWVERSION "v1.2"
!define CURRENTVERSION ""
...
...
!include "WordFunc.nsh"
!include "StrFunc.nsh"
${StrStr} ;Activate the StrStr Function
!insertmacro VersionCompare
Section
ReadRegStr $0 HKLM "Software\${APPNAME}" "Version"
StrCpy $CURENTVERSION "$0"
${VersionCompare} "${CURENTVERSION}" "${NEWVERSION}" $R0
${If} $R0 = 0
MessageBox MB_VER "equal"
Abort
${If} $R0 = 1
MessageBox MB_VER "newer"
Abort
${If} $R0 = 2
MessageBox MB_VER "newer"
Abort
SectionEnd
(Example: E.3.16 VersionCompare)
With those code the compiler says:
!insertmacro: end of FUNCTION_STRING_StrStr
!insertmacro: VersionCompare
!insertmacro: end of VersionCompare
Section: ""
ReadRegStr $0 HKLM\Software\APPNAME\Version
Usage: StrCpy $(user_var: output) str [maxlen] [startoffset]
Error in script "stdin" on line 85 -- aborting creation process
without those lines
ReadRegStr $0 HKLM "Software\${APPNAME}" "Version"
StrCpy $CURENTVERSION "$0"
the compiler says:
!insertmacro: end of FUNCTION_STRING_StrStr
!insertmacro: VersionCompare
!insertmacro: end of VersionCompare
Section: ""
!insertmacro: VersionCompareCall
!insertmacro: end of VersionCompareCall
!insertmacro: _If
!insertmacro: end of _If
Usage: MessageBox mode messagebox_text [/SD return] [return_check label_to_goto_if_equal [return_check2 label2]]
mode=modeflag[|modeflag[|modeflag[...]]]
modeflag=(MB_ABORTRETRYIGNORE|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_YESNO|MB_YESNOCANCEL|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_USERICON|MB_TOPMOST|MB_SETFOREGROUND|MB_RIGHT
Error in script "stdin" on line 88 -- aborting creation process
you see there are some bugs, but i don't know how to fix it. i'm not really fit in nsis.
thanks for help
You missed the distinction between variables (and how they are referenced) and defined constants (and their usage).
Var creates a variable which only has a value after the compile, during the execution.
In addition, I think VersionCompare won't like the "v" you put in ${NEWVERSION}.
Don
!define sets a compile time value and replaces the ${} entry with the defined value during the compilation.
Var something
StrCpy $something "any text"
!define something "different text"
StrCmp $something ${something} equal
...
equal:
Var creates a variable which only has a value after the compile, during the execution.
In addition, I think VersionCompare won't like the "v" you put in ${NEWVERSION}.
Don