小编Mik*_*ber的帖子

无法查询CSDVersion的值

我按照这个C#示例,可以查询一些注册表值,但不能全部查询:

如果我不知道它的类型,如何从远程计算机获取注册表值?(C#)

我可以可靠地获取注册表项,例如CurrentVersion,ProductName等.但是当我尝试获取CSDVersion时,它失败了.

我已经在.NET 2.0和.NET 4.0中编译,但结果相同.我试过查询本地机器和远程机器.两者都能够返回其他注册表值,但不能返回这个特定的值.

两者都是x64机器(Windows 7旗舰版和Windows 2008 R2),因此无论如何都不会出现任何问题.

我发现一个奇怪的事情是EnumValues函数只返回17个值,并且在这个特定的注册表项中有21个.在缺少的四个中,CSDVersion就是其中之一.

我很好奇,如果有人知道为什么这四个值不会回来,但所有其余的都会?缺少价值观:

  • CSDVersion - Reg_sz
  • DigitalProductID - Reg_binary
  • DigitalProductId4 - Reg_binary
  • ProductID - Reg_sz

真正奇怪的是我有另一个用.NET 2.0编写的项目,并且有一个类库可以做这种事情.在运行库的NUnit测试时,此查询正常工作并返回所有21个值.但是当通过另一个项目运行这个库时,它不起作用.

我已经逐步调试了调用库的项目中的代码,当这样做时,它只返回17个条目.所以我无法解释发生了什么.

任何人都有任何关于下一步去哪里的想法?下面是我正在使用的确切代码,它根本不适用于上述特定情况

using System;
using System.Management;
using System.Management.Instrumentation;

namespace GetCSDVersion
{
    public enum RegHive : uint
    {
        HKEY_CLASSES_ROOT = 0x80000000,
        HKEY_CURRENT_USER = 0x80000001,
        HKEY_LOCAL_MACHINE = 0x80000002,
        HKEY_USERS = 0x80000003,
        HKEY_CURRENT_CONFIG = 0x80000005
    }

    public enum RegType
    {
        REG_SZ = 1,
        REG_EXPAND_SZ,
        REG_BINARY,
        REG_DWORD,
        REG_MULTI_SZ = 7
    }

    class Program
    {
        static void Main(string[] args) …
Run Code Online (Sandbox Code Playgroud)

c#

0
推荐指数
1
解决办法
1565
查看次数

标签 统计

c# ×1