views:

864

answers:

5

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.

A: 

Can you say which hive you are looking at in the registry? my first guess would be that you may be accidently looking in the wrong place.

Kev Hunter
His code shows access to LocalMachine.
Bevan
A: 

Sounds to me that, even though you think you're running with elevated privileges, you're not - and that your programs registry access is being silently redirected somewhere safe.

Check out Registry Virtualization for details.

Bevan
A: 

You may not have the privileges that you think you do. With the UAC on, the OS will create a virtual registry for you to write to if you do not have sufficient privileges to write to the 'real' registry (same goes for the file system.)

Ed Swangren
+9  A: 

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.

Michael Petrotta
+2  A: 

This sounds like a registry virtualisation issue. If the user of your app is not an administrator, then the registry write will be virtualised into a per-user virtual store -- though if your other program is running under the same account then it should still be able to see that per-user setting...

The linked page tells you where to find the virtual store to check this theory.

itowlson