- NSIS Discussion
- Reading a 64bit registry key with 32bit NSIS installer
Archive: Reading a 64bit registry key with 32bit NSIS installer
voxio
15th December 2010 13:28 UTC
Reading a 64bit registry key with 32bit NSIS installer
  Hi Guys,
I have a Windows Server 2008 machine (64bit) and I'm trying to grab a value from the registry with a 32bit NSIS installer binary but I get re-directed to Wow64node even with SetRegView 64 set.
I'm using the following code to check the JRE version and grab java_home:
${elseif} $arch == "64"
       ;check for 64bit JRE on 64bit
        SetRegView 64
        ReadRegStr$1 HKLM "SOFTWARE\JavaSoft\Java Runtime Environment" "CurrentVersion"
       Messagebox MB_OK "1: $1"
       ReadRegStr $2 HKLM "SOFTWARE\JavaSoft\Java Runtime Environment\$1" "JavaHome"
       ;check for 32bit JRE on 64bit
       ${if} $2 == ""
           ReadRegStr $1 HKLM "SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment" "CurrentVersion"
           ReadRegStr $2 HKLM "SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment\$1" "JavaHome"
        ${endif}
    ${endif} 
The MessageBox always prints $1 as nothing even though the registry key exists.
      
      Any help would be appreciated.
    
    
      Anders
      15th December 2010 14:17 UTC
      Where did $arch get set? AKA are you sure this is a 64 bit system?
      
      And with anything like this, just fire up Process Monitor and check which key is accessed
     
    
    
      voxio
      15th December 2010 14:50 UTC
      $arch gets picked up correctly.
      
      Process monitor says it's trying to access:
      
      RegOpenKey HKLM\SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment NAME NOT FOUND Desired Access: Read
      
      So its definitely forcing me over to the 64bit side.
     
    
    
      Afrow UK
      15th December 2010 22:34 UTC
      Are you sure you have a 64-bit JavaSoft key (not in Wow6432Node)? I don't have one on any of my Windows x64 machines.
      
      Stu
     
    
    
      voxio
      16th December 2010 11:22 UTC
      Hi Afrow,
      
      If you install 32bit JRE on a 64bit machine (which I believe is the default) the correct registry keys are placed in Wow6432Node. If you install 64bit JRE on a 64bit machine the registry keys are placed in the 64bit registry.
     
    
    
      MrRichards
      5th May 2011 10:42 UTC
      Hi,
      I'm sorry to bring this up again, but is there a way to delete Registry-Values from a 64 Bit Programm?
      
      I tried
      
DeleteRegValue HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" "SunJavaUpdateSched" 
But when looking for what NSIS is trying to delete, I can see that NSIS tries to delete from
      
      
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run\SunJavaUpdateSched" 
Why is it doing so and is there a way to prevent this?
    
 
    
    
      Anders
      5th May 2011 11:42 UTC
      
      
        Originally posted by MrRichards
        Hi,
        I'm sorry to bring this up again, but is there a way to delete Registry-Values from a 64 Bit Programm?
        
        I tried
        
DeleteRegValue HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" "SunJavaUpdateSched" 
But when looking for what NSIS is trying to delete, I can see that NSIS tries to delete from
        
        
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run\SunJavaUpdateSched" 
Why is it doing so and is there a way to prevent this?
      
SetRegView
    
 
    
    
      MrRichards
      5th May 2011 12:34 UTC
      Thank you!
      
      I need to read Registry-Strings from Programs that are 64 Bit and from some, that are not (these are in the Wow6432Node). When I call 'SetRegView 64', can I call
      
DeleteRegValue HKLM "SOFTWARE\Wow6432Node\Something 
>
then or is the only way calling 'SetRegView 32' to get this string?
      Also, what happens if I call SetRegView 64 on 32 Bit Systems? Does this affect the installer in any way?
    
 
    
    
      MSG
      5th May 2011 12:54 UTC
      These things are trivially simple to test by yourself. Why don't you just try it, and see what happens?
     
    
    
      sr164w
      5th December 2011 06:28 UTC
      Hii
      I am trying to access 32bit registry from 63bit machine using SetRegView 32
      though 32bit software installed in the registry it is showing tat its not installed.
     
    
    
      MSG
      5th December 2011 11:27 UTC
      You'll need to give more details. For example, some code example of how you write (and then read!) the registry keys.