Bug in RegistryKey.SetValue

P

PromisedOyster

I need to add/update a registry value with a dword that is greater
than System.Int32.MaxValue. The value is 0x80000024 and is used for
setting the BrowserFlags value for software\\classes\\BrowserFlags.

I can go into the registry editor and set it that way, but NOT using
the .NET framework:

Here is my sample code:

RegistryKey rk = Registry.LocalMachine.OpenSubKey("software\\classes\
\BrowserFlags", true);
rk.SetValue(key, System.Int32.MaxValue, RegistryValueKind.DWord); //
works
rk.SetValue(key, 0x80000024, RegistryValueKind.DWord); // gives an
error

Any advice on how to achieve this?

(This value still fits into 32 bits, it is just that it is a uint not
an int).
 
P

Peter Duniho

PromisedOyster said:
[...]
rk.SetValue(key, 0x80000024, RegistryValueKind.DWord); // gives an
error

It would have be better for you to include the exact error and text in
your post.
Any advice on how to achieve this?

(This value still fits into 32 bits, it is just that it is a uint not
an int).

Huh. Bizarre. Given that the argument is "Object", I would've thought
a boxed uint would've worked fine, since the method has to convert the
type somehow, and you're providing DWORD as the value type.

That said, you can get it to work fine just by casting to an int:

rk.SetValue(key, unchecked((int)0x80000024), RegistryValueKind.DWord);

Or, of course, by providing a signed int value that is equivalent:

rk.SetValue(key, -2147483612, RegistryValueKind.DWord);

(decimal because hex literals are always unsigned).

By the way, your variable name is messed up. You're using "key" to
describe a value that holds the name of a registry _value_, not a key.
That's going to confuse someone some day, and it might be you! :)

Pete
 
P

Patrice

Hi,

Here BrowserFlags seems to be a value name under another key such as
Aplication.Manifest. Are you sure the registry lcoation is correct ?

As Peter said it's best to always provide the exact error message you have
as even on a single line of code, there are multiple possible causes (for
now I have an error with your code but IMO this is not the one you have and
it could be caused by a typo in your code, having the exact error message
would allow to make sure if I reproduced the same error)...
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top