read leer getvalue c# windows types registry

leer - read registry c#



Cómo colocar un DWORD en el registro con el bit más alto establecido (2)

Mi conjetura es que necesita utilizar un int firmado en su lugar. Así que simplemente convertirlo de esta manera:

regKey.SetValue("Value", unchecked((int) 0xf0000000u), RegistryValueKind.DWord);

Estoy de acuerdo en que es un poco extraño, cuando consideras que DWORD normalmente no está firmado (IIRC) pero al menos vale la pena intentarlo ...

Me he encontrado con un problema extraño: al configurar los valores del tipo DWORD en el Registro de Windows desde mi aplicación C #, sigo recibiendo errores cuando se establece el bit más alto. Aparentemente parece que hay algún tipo de problema de conversión entre enteros con signo y sin signo.

Ejemplo: cuando hago algo como esto

regKey.SetValue("Value", 0x70000000u, RegistryValueKind.DWord);

funciona bien. Pero cuando agrego el bit más alto (que, dado que estoy tratando específicamente con enteros sin signo, debería ser solo un bit de otro valor), así

regKey.SetValue("Value", 0xf0000000u, RegistryValueKind.DWord);

Obtengo una excepción ("El tipo del objeto de valor no coincide con el RegistryValueKind especificado o el objeto no se pudo convertir correctamente").

¿Pero no debería funcionar? DWORD es un tipo de datos enteros de 32 bits sin signo, y también lo es el literal 0xf0000000u (C # le asigna automáticamente el tipo de datos UInt32), por lo que deben ser una coincidencia perfecta (y establecer el valor manualmente en el editor de registro en "0xf0000000" funciona bien , también). ¿Es esto un error en .NET o estoy haciendo algo mal?


Sé que esto es una locura tarde, sin embargo, si no desea utilizar sin marcar o está utilizando VB.Net donde no está disponible, lo siguiente también funcionaría.

Byte[] byteArray = BitConverter.GetBytes(0xf0000000u); int USignedIntTooBigForInt = BitConverter.ToInt32(byteArray, 0); regKey.SetValue("Value", USignedIntTooBigForInt, RegistryValueKind.DWord);