Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在注册表中设置最高位的DWORD_C#_Windows_Types_Registry - Fatal编程技术网

C# 如何在注册表中设置最高位的DWORD

C# 如何在注册表中设置最高位的DWORD,c#,windows,types,registry,C#,Windows,Types,Registry,我遇到了一个奇怪的问题:当从我的C#应用程序在Windows注册表中设置DWORD类型的值时,当设置最高位时,我会不断出错。显然,有符号整数和无符号整数之间似乎存在某种转换问题 当我做这样的事情时 regKey.SetValue("Value", 0x70000000u, RegistryValueKind.DWord); regKey.SetValue("Value", 0xf0000000u, RegistryValueKind.DWord); 它很好用。但是当我添加最高位时(因为我专门

我遇到了一个奇怪的问题:当从我的C#应用程序在Windows注册表中设置DWORD类型的值时,当设置最高位时,我会不断出错。显然,有符号整数和无符号整数之间似乎存在某种转换问题

当我做这样的事情时

regKey.SetValue("Value", 0x70000000u, RegistryValueKind.DWord);
regKey.SetValue("Value", 0xf0000000u, RegistryValueKind.DWord);
它很好用。但是当我添加最高位时(因为我专门处理无符号整数,所以它应该是另一个值位),就像这样

regKey.SetValue("Value", 0x70000000u, RegistryValueKind.DWord);
regKey.SetValue("Value", 0xf0000000u, RegistryValueKind.DWord);
我得到一个异常(“值对象的类型与指定的RegistryValueKind不匹配,或者对象无法正确转换”)

但它不应该起作用吗?DWORD是一种无符号的32位整数数据类型,
0xf0000000u
literal(C#自动为其分配UInt32数据类型),因此它们应该是完美匹配的(并且在注册表编辑器中将值手动设置为“0xf0000000”也可以正常工作)。这是.NET中的错误还是我做错了什么?

我猜您需要使用带符号的
int
。因此,只需将其转换为以下形式:

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

<>我同意这有点奇怪,当你认为dWord通常是未签名的(Irrc),但它至少是值得一试的…

我知道这是疯狂的,但是,如果你不想使用未选中的或使用VB.NET,因为它不可用,那么下面也会起作用。
Byte[] byteArray = BitConverter.GetBytes(0xf0000000u);
int USignedIntTooBigForInt = BitConverter.ToInt32(byteArray, 0);
regKey.SetValue("Value", USignedIntTooBigForInt, RegistryValueKind.DWord);
你是对的,这很奇怪,但不管它值多少钱,它都是有效的。谢谢