- 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.