- NSIS Discussion
- Read version out .ini file
Archive: Read version out .ini file
Perky Jacket
3rd August 2004 18:43 UTC
Write and read version out registry
Hi,
I wanna make a patch for my application.
So I gotta write a registry string for the previous version
and have to read this registry string in the new version,
right?
But how i do this?
(version is 1.0)
WriteRegStr HKLM "Software/Example" "" "${PRODUCT_VERSION}"
is that right?
And in the setup for the new version
ReadRegStr HKLM "Software/Example" "" "....." ;and now? this is my first problem
When I find it out, how I insert a condition, that ask for the registry and version of the old version.
The setup shouldn´t to continue, if the previous version not installed on the system. But it shouldn´t check, if a file is installed.
This is the reason why I need this stuff with the registry bla bla.
Oh sh*t, my english is so bad :(
I hope your understand me and can help.
ps: I don´t look over the documention for the registry stuff
EDIT:
I´ve choose a wrong thread name. "Read version out .ini file" was my misstake, sry.
Yathosho
3rd August 2004 19:13 UTC
you're mixing up WriteRegStr with WriteINIStr and ReadRegStr with ReadINIStr. if you want to write the version into an ini-file (myfile.ini) you will need to use WriteINIStr/ReadINIStr. if you want the version stored in the windows registry, you must use WriteRegStr/ReadRegStr.
the other problem is that you don't use the correct syntax for each Read command.
try this:
WriteRegStr "HKLM" "Software/Example" "" "${PRODUCT_VERSION}"
ReadRegStr $0 "HKLM" "Software/Example" ""
      or
      
WriteINIStr "$EXEDIR\MyFile.ini" "MySection" "Version" "${PRODUCT_VERSION}"
ReadINIStr $0 "$EXEDIR\MyFile.ini" "MySection" "Version"
      in both cases the value is in the string $0
    
    
      Perky Jacket
      3rd August 2004 21:59 UTC
      Thanks.
      
      In the setup of the previous version I insert:
      
WriteRegStr "HKLM" "Software/Example" "" "${PRODUCT_VERSION}"
      
      And in the setup of the new version I insert:
      
ReadRegStr $0 "HKLM" "Software/Example" ""
      
      But with wich command I have to insert the condition?
      If version xyz than ...
      
      else
      ....
      
      How I do this?
    
 
    
    
      deguix
      4th August 2004 03:00 UTC
      Check out this:
      
      Comparing full versions numbers (xx.xx.xx.xx ? xx.xx.xx.xx)
      
      You can compare the return value with IntCmp. Like:
      
      
IntCmp $var 1 IfNewer IfEqual IfOlder
IfNewer:
  # put commands, or wharever you like.
Goto End
IfEqual:
  # put commands, or wharever you like.
Goto End
IfOlder:
  # put commands, or wharever you like.
End:
     
    
    
      Perky Jacket
      4th August 2004 13:57 UTC
      It´s so damn complicated or I´m dumb like bread.
      
      I´ve insert this (in the setup for the new version):
      
      
WriteRegStr "HKLM" "Software/Map2" "" "${PRODUCT_VERSION}"
ReadRegStr $0 "HKLM" "Software/Map" ""
IntCmp $var 1 IfNewer IfEqual IfOlder
IfNewer:
  Messagebox MB_OK "Older Version was found"
Goto End
IfEqual:
  Messagebox MB_OK "Same Version was found"
Goto End
IfOlder:
  Messagebox MB_OK "Newer Version was found"
End:
      
      But if I install the new version (with this code) it´s
      show "Same Version was found". But it´s have to show
      "Older Version was found".
      
      What´s wrong?
      
      Sry, I´m a noob.
    
 
    
    
      deguix
      4th August 2004 14:06 UTC
      Sorry, I was expecting you to use that function I pointed out, because you can't compare dotted versions with IntCmp alone.
     
    
    
      Perky Jacket
      4th August 2004 14:41 UTC
      I´ve checked out thee link, wich u give me.
      I´ve tryed the scripts but it doesn´t work.
      
      It´s to puke >_< .
      
      I can script simply installers with downloads, with subsection, with custompages but not this! *arg*
      
      Now I have tryed the code from the NSIS setup.
      The code with "add/reinstall components" and "remove".
      It´s checked the version, too.
      It´s works halfways. The only problem is, that the setup show, it´s an older version installed. Doing so it is
      the same version. :mad:
      
      Please, u have to help me. It´s damn important.
     
    
    
      deguix
      4th August 2004 14:58 UTC
      Hmmm... I read more about this function and it's not what expected. I used a function called "Version Check" function (where can I find it?).
      
      Use this code where you want to detect the version:
      
      
ReadRegStr $0 "HKLM" "Software/Map" ""
Push $0
Push ${PRODUCT_VERSION}
Call VersionCheck
Pop $1
IntCmp $1 1 IfNewer IfEqual IfOlder
IfNewer:
  # put commands, or wharever you like.
Goto End
IfEqual:
  # put commands, or wharever you like.
Goto End
IfOlder:
  # put commands, or wharever you like.
End:
Put this at the bottom of the script, outside functions and sections:
      
      
Function VersionCheck
  Exch $0 ;second versionnumber
  Exch
  Exch $1 ;first versionnumber
  Push $R0 ;counter for $0
  Push $R1 ;counter for $1
  Push $3 ;temp char
  Push $4 ;temp string for $0
  Push $5 ;temp string for $1
  StrCpy $R0 "-1"
  StrCpy $R1 "-1"
  Start:
  StrCpy $4 ""
  DotLoop0:
  IntOp $R0 $R0 + 1
  StrCpy $3 $0 1 $R0
  StrCmp $3 "" DotFound0
  StrCmp $3 "." DotFound0
  StrCpy $4 $4$3
  Goto DotLoop0
  DotFound0:
  StrCpy $5 ""
  DotLoop1:
  IntOp $R1 $R1 + 1
  StrCpy $3 $1 1 $R1
  StrCmp $3 "" DotFound1
  StrCmp $3 "." DotFound1
  StrCpy $5 $5$3
  Goto DotLoop1
  DotFound1:
  StrCmp $4 "" 0 Not4
    StrCmp $5 "" Equal
    Goto Ver2Less
  Not4:
  StrCmp $5 "" Ver2More
    IntCmp $4 $5 Start Ver2Less Ver2More
  Equal:
  StrCpy $0 "0"
  Goto Finish
  Ver2Less:
  StrCpy $0 "1"
  Goto Finish
  Ver2More:
  StrCpy $0 "2"
  Finish:
  Pop $5
  Pop $4
  Pop $3
  Pop $R1
  Pop $R0
  Pop $1
  Exch $0
FunctionEnd
     
    
    
      Perky Jacket
      6th August 2004 13:39 UTC
      Thank you! Thank you! Thank you! Thank you! Thank you!
      
      It´s work!
      
      At first time I had make it so like u said.
      It had doesn´t work.
      
      The mistake was this:
      
ReadRegStr $0 "HKLM" "Software/Map" ""
      
      It have to be:
      
ReadRegStr $0 "HKLM" "Software\Map" ""
      
      A backslash.
      
      And it´s work now!
      Thanks!