簡體   English   中英

如何從LOCAL_MACHINE下的注冊表讀取

[英]How to read from Registry under LOCAL_MACHINE

我正在對Windows窗體應用程序進行預配對,該應用程序將顯示當前安裝的office(2016)的位數。 我在表單中放置了一個Button(ChkBtn)和Label(BitnessLbl),這將有助於完成任務。 問題是,即使我可以通過在注冊表中搜索來找到“ Bitness”(在我的情況下為“ x64”)的值,但程序仍無法找到指定的注冊表。 我添加了一張圖片,可以進一步解釋我的問題。 我正在使用的代碼如下

using System;
using System.Windows.Forms;
using Microsoft.Win32;

namespace GetOfficeBitness
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void ChkBtn_Click(object sender, EventArgs e)
        {
            var arg = @"SOFTWARE\Microsoft\Office\16.0\Outlook";
            var key = Registry.LocalMachine.OpenSubKey(arg, false);//OpenSubKey(arg);
            /*var p = Registry.LocalMachine.GetSubKeyNames();
            var l = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Office\16.0\Common");
            var n = l.GetSubKeyNames();*/
            if (key != null)
            {
                if (key.GetValue("Bitness").ToString() == "x86" || key.GetValue("Bitness").ToString() == "X86")
                    BitnessLbl.Text = @"32 Bit Office";
                //Environment.Exit(1);
            }
            else
            {
                //Environment.Exit(0);
                BitnessLbl.Text = @"64 Bit Office";
            }

        }
    }
}

圖片鏈接在這里: -https : //i.stack.imgur.com/XUcuX.png

正如我在評論中指出的那樣,當您的代碼以32位進程運行時,您會遇到Registry Redirector的影響。

當看起來您的代碼正在訪問HKEY_LOCAL_MACHINE\\Software ,實際上是在訪問HKEY_LOCAL_MACHINE\\Software\\Wow6432Node

要抵消這種影響,請確保使用接受RegistryView並請求64位視圖的適當方法/重載來打開密鑰。 例如,您可能需要使用OpenBaseKey而不是使用內置的LocalMachine屬性作為起點。

因此,類似以下內容:

var key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine
                                 ,RegistryView.Registry64).OpenSubKey(arg, false);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM