要求将值:4294967295用DWord类型写入注册表,然后再读取该值,请详细写出执行代码,代码运行成功后马上放分。\HKEY_USERS\A Value = 4294967295

解决方案 »

  1.   

    Registry.SetValue(strHKey, "A", 4294967295, RegistryValueKind.DWord);
    出现“值不在预期的范围内”的错误
      

  2.   

    您可以将 System.Int64 存储为 RegistryValueKind.DWord,但仅当它的值小于 System.Int32 的最大值时才可以这样做
      

  3.   

    对于64 位二进制数,应该使用QWord类型,不过挺奇怪的,这种类型不能直接在注册表编辑器中添加。            Microsoft.Win32.RegistryKey key;
                key = Microsoft.Win32.Registry.Users;
                key.SetValue("A", 4294967295L, Microsoft.Win32.RegistryValueKind.QWord);
                key.Close();
      

  4.   

    那就变了类型喔,我需要的是DWord类型啊
      

  5.   

    研究出方法了,不过很囧~            uint i = 4294967295U;
                Microsoft.Win32.RegistryKey key;
                key = Microsoft.Win32.Registry.Users;
                key.SetValue("A",(int)i, Microsoft.Win32.RegistryValueKind.DWord);
                key.Close();
      

  6.   

    DWord(Double Word),指任何4个字节的存储。是int还是uint取决你你怎么去看它。
    比如0xFFFFFFFF理解为uint的时候为4294967295,理解为int的时候为-1。
    Registry.SetValue(strHKey, "A", unchecked((int)4294967295), RegistryValueKind.DWord);
    uint result = (uint)(int)Registry.GetValue(strHKey, "A", 0);     //4294967295

    注:
    Registry.SetValue(strHKey, "A", 4294967295, RegistryValueKind.DWord)之所以会出错,是因为C#编译器聪明到推断出4294967295最好用uint来表示,编译成SetValue(..., (object)(uint)4294967295, ...); 
    我个人认为微软的SetValue见到RegistryValueKind.DWord时处理的不妥当 - 它只尝试着转换为int,而没有考虑uint的情况。