none
RegistryKey.OpenRemoteBaseKey不能准确读取注册表的问题 RRS feed

  • 问题

  • 我先说一下我所做的测试:

     RegistryKey.OpenBaseKey是4.0框架的方法

                RegistryKey k1 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,RegistryView.Registry64);
                RegistryKey StdUninstallKey = k1.OpenSubKey(@"SOFTWARE\");
                string[] result = StdUninstallKey.GetSubKeyNames();

    用这种方法读取可以,与注册表中的相符SIFTWARE下面的SubKey是一样的.

    现在的框架是用的2.0的,,方法如下

                RegistryKey k1 = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, "");
                RegistryKey StdUninstallKey = k1.OpenSubKey(@"SOFTWARE\");
                string[] result = StdUninstallKey.GetSubKeyNames();

    这个读取出来的就和注册表中的不一样的,我注册表中HKEY_LOCAL_MACHINE\SOFTWARE下面只有30多项,但是这个读出来的有70多项,而且与SOFTWARE下面的SubKey完全不同,也不知道是怎么回事,特来求助

    在这里先谢谢给位了,因为不想再去部署4.0的框架,因此.......

    我的机器是win764位旗舰版.....


    我是一只猪

    2012年2月12日 17:04

答案

  • 你可以改用以下的方式哦!

    RegistryKey StdUninstallKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\");

    不過,它是依您程式設計成x86, x64, or AnyCPU,如果依您.net 2.0的方式,同一段程式,取出的數量會不同哦!

    以下有相關的資訊,請您參考一下,謝謝!

    Issue reading x64 Registry keys


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/




    2012年2月13日 1:27

全部回复

  • 你可以改用以下的方式哦!

    RegistryKey StdUninstallKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\");

    不過,它是依您程式設計成x86, x64, or AnyCPU,如果依您.net 2.0的方式,同一段程式,取出的數量會不同哦!

    以下有相關的資訊,請您參考一下,謝謝!

    Issue reading x64 Registry keys


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/




    2012年2月13日 1:27
  • 非常的感谢.问题已经解决



    我是一只猪

    2012年2月13日 4:36