C# – Adding registry key in C# shows when I read it back, but not in regedit

cregistrywindows-vista

I am adding a registry key using the following code:

var key = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(key);

Within my code I can read back the value find, even in between runs. However, the key never shows in regedit and the other program that should be reading the key can't see it.

The program is running on Vista with elevated priviledges.

Best Answer

Vista introduced registry virtualization; "global" registry changes are, in some cases, redirected to user-specific locations:

Registry virtualization is an application compatibility technology that enables registry write operations that have global impact to be redirected to per-user locations. This redirection is transparent to applications reading from or writing to the registry. It is supported starting with Windows Vista.

This form of virtualization is an interim application compatibility technology; Microsoft intends to remove it from future versions of the Windows operating system as more applications are made compatible with Windows Vista. Therefore, it is important that your application does not become dependent on the behavior of registry virtualization in the system.

You can disable this by customizing your application manifest, or you can modify policy for just the key you're touching.

WOW64 (are you running a 64-bit edition of Vista?) also does registry redirection. This has bitten me in annoying ways.

See the MSDN article on registry virtualization.

Related Topic