I want to set a value for 'NoModify' in below registry path. "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\XXXX"
I am using below code and it works only for X86 machines. Can you see any reason why this is not working for x64 machines?
// This value is correct
RegistryView registryView = releaseFlags.Contains("PLATFORM_X86") ? RegistryView.Registry64 : RegistryView.Registry32;
using (RegistryKey hkeyLocalMachine = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, registryView))
{
RegistryKey noModifyKey = hkeyLocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{xxxx}", true); //SL: Key Name
if (noModifyKey != null)
{
noModifyKey.SetValue("NoModify", 0);
noModifyKey.Flush();
}
}
When you are on a 64 bit machine and your app is 32 bit - it should store these settings in the HKLM\Software\WOW6432Node instead of the HKLM\Software\ node.
As far as you compiles your .NET program as
x86
notAnyCPU
, you will be using the "correct" registry keys meant for x86 in any circumstances because it will be running as x86.If you compile it as
x64
orAnyCPU
, it could be quite tricky because it will probably run as x64 on an x64 machine and uses the "wrong" registry whereHKLM\SOFTWARE
for x86 programs is actuallyHKLM\SOFTWARE\WOW6432Node
.It's my mistake in the code.
Should be as follows: