亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#獲取注冊(cè)表指定鍵值操作

 更新時(shí)間:2020年12月09日 08:40:11   作者:秋漓  
這篇文章主要介紹了C#獲取注冊(cè)表指定鍵值操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

某些程序必須依賴指定運(yùn)行環(huán)境。那么讀取注冊(cè)表來判斷此電腦是否有執(zhí)行環(huán)境是個(gè)很不錯(cuò)的辦法。因?yàn)槊總€(gè)軟件安裝之后都會(huì)在注冊(cè)表中注冊(cè)對(duì)應(yīng)的鍵值,并且有些鍵值是獨(dú)一無二的。

那么首先就需要找到那個(gè)具體的獨(dú)一無二的鍵值,以便程序在運(yùn)行之前能夠去讀取以判斷。

代碼如下:

class Program
 {
  private static string _sValue = string.Empty; 
  static void Main(string[] args)
  {
   Console.WriteLine("請(qǐng)輸入待查找值:");
   _sValue = Console.ReadLine();
   Console.WriteLine($"正在查詢。。。");
 
   var registryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,
     Environment.Is64BitOperatingSystem ? RegistryView.Registry64 : RegistryView.Registry32); //判斷機(jī)器位數(shù)
   int i = 0;
   GetKeyNames(registryKey, ref i);
   Console.WriteLine($"查詢結(jié)束。。。");
   Console.ReadKey();
  }
 
  /// <summary>
  /// 遍歷所有子項(xiàng)
  /// </summary>
  /// <param name="subkey">節(jié)點(diǎn)</param>
  /// <param name="i"></param>
  private static void GetKeyNames(RegistryKey subkey, ref int i)
  {
   foreach (var subkey_name in subkey.GetSubKeyNames()) // 檢索包含所有子項(xiàng)名稱的字符串?dāng)?shù)組
   {
    try
    {
     using (RegistryKey csubkey = subkey.OpenSubKey(subkey_name))
     {
      GetValueName(csubkey, ref i);
      GetKeyNames(csubkey, ref i);
     }
    }
    catch { }
   }
  }
 
  /// <summary>
  /// 若包含輸入值則輸出記錄
  /// </summary>
  /// <param name="subkey">節(jié)點(diǎn)</param>
  /// <param name="i"></param>
  private static void GetValueName(RegistryKey subkey, ref int i)
  {
   foreach (var name in subkey.GetValueNames()) //檢索包含與此項(xiàng)關(guān)聯(lián)的所有值名稱的字符串?dāng)?shù)組
   {
    var sValue = subkey.GetValue(name) + string.Empty;
    if (string.Compare(sValue, string.Format(@"{0}", _sValue, StringComparison.OrdinalIgnoreCase)) == 0)
    {
     Console.WriteLine(++i + "\t" + subkey.Name);
    }
   }
  }
 }

現(xiàn)在查找含有E:\ArcGIS\Python27\ArcGISx6410.2\python.exe的鍵:

結(jié)果如下:

補(bǔ)充知識(shí):利用C#訪問注冊(cè)表獲取軟件的安裝路徑

絕大多數(shù)軟件,基本上都會(huì)在注冊(cè)表中記錄自己的名字和安裝路徑信息。

在注冊(cè)表中記錄這些信息的位置是:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths

因此,我們只要能訪問到注冊(cè)表的這個(gè)位置,就可以獲取到某些軟件的名稱和安裝路徑信息。

本博文使用C#訪問注冊(cè)表獲取軟件的安裝路徑并進(jìn)行顯示。

1 示例程序主畫面說明

示例程序主畫面如下圖所示。

在畫面中的文本框中輸入可執(zhí)行程序的名稱,點(diǎn)擊“獲取路徑”按鈕,便會(huì)在畫面中的下一行(“獲取路徑”按鈕所在行的下一行)顯示出該程序完整的安裝路徑信息。

這里輸入的可執(zhí)行文件名稱必須是程序在注冊(cè)表中的名稱,如Adobe Reader在注冊(cè)表中的名稱為“AcroRd32.exe”。

2 示例程序完整代碼

using System;
using System.Windows.Forms;
using Microsoft.Win32;
 
namespace GetSoftWarePathExp
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }
 
    private void button1_Click(object sender, EventArgs e)
    {
      try
      {
        string softName = textBox1.Text.ToString();
        string strKeyName = string.Empty;
        string softPath = @"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\";
        RegistryKey regKey = Registry.LocalMachine;
        RegistryKey regSubKey = regKey.OpenSubKey(softPath + softName + ".exe", false);
 
        object objResult = regSubKey.GetValue(strKeyName);
        RegistryValueKind regValueKind = regSubKey.GetValueKind(strKeyName);
        if (regValueKind == Microsoft.Win32.RegistryValueKind.String)
        {
          this.label3.Text = objResult.ToString();
        }
      }
      catch
      {
        this.label3.Text = "朋友,獲取程序路徑失??!";
      }
    }
  }
}

注意:需要添加引用:using Microsoft.Win32;

3 代碼說明

(1)代碼“RegistryKey regKey = Registry.LocalMachine”使regKey 指向注冊(cè)表主鍵HKEY_LOCAL_MACHINE。

(2)代碼“RegistryKey regSubKey = regKey.OpenSubKey(softPath + softName + ".exe", false)”使regSubKey 指向我們需要查找的注冊(cè)表子健。

(3)代碼“object objResult = regSubKey.GetValue(strKeyName)”獲取注冊(cè)表的鍵值。

(4)代碼“RegistryValueKind regValueKind = regSubKey.GetValueKind(strKeyName)”獲取注冊(cè)表的鍵值類型。

(5)最后輸出獲取到的鍵值信息。

(6)程序若出錯(cuò),輸出“朋友,獲取程序路徑失?。 钡奶崾拘畔?。

注意:RegistryKey.GetValue和RegistryKey.GetValueKind方法均需要傳入一個(gè)參數(shù)指示要檢索的值的名稱,當(dāng)傳遞給RegistryKey.GetValue和RegistryKey.GetValueKind方法的參數(shù)為一個(gè)空字符串時(shí),則檢索的是一個(gè)未命名的值,在注冊(cè)表編輯器中顯示此未命名的值時(shí),將顯示字符串“(Default)”,而不是顯示一個(gè)名稱。

在本例中,傳入的就是一個(gè)空字符串,若以檢索軟件Adobe Reader的安裝信息為例,則獲取的是下圖中的第一條注冊(cè)表信息,此時(shí)名稱項(xiàng)顯示字符串“(默認(rèn))”。

4 程序運(yùn)行結(jié)果

(1)獲取Adobe Reader的安裝路徑

輸入“AcroRd32”,點(diǎn)擊“獲取路徑”,得到以下結(jié)果,是不是和注冊(cè)表中記錄的信息一致啊。

(2)獲取chrome的安裝路徑

輸入“chrome”,點(diǎn)擊“獲取路徑”,得到以下結(jié)果,是不是和注冊(cè)表中記錄的信息一致啊。

5 多說兩句

在開發(fā)中,有時(shí)會(huì)指定特定程序來執(zhí)行某類操作,這時(shí)可能會(huì)涉及讀取注冊(cè)表信息來打開程序。只是有些程序可能不存在這樣的注冊(cè)信息,這時(shí),我們就必須采取其他方式了。

以上這篇C#獲取注冊(cè)表指定鍵值操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C# 導(dǎo)出Excel的6種簡(jiǎn)單方法實(shí)現(xiàn)

    C# 導(dǎo)出Excel的6種簡(jiǎn)單方法實(shí)現(xiàn)

    C# 導(dǎo)出 Excel 的6種簡(jiǎn)單方法:數(shù)據(jù)表導(dǎo)出到 Excel,對(duì)象集合導(dǎo)出到 Excel,數(shù)據(jù)庫(kù)導(dǎo)出到 Excel,微軟網(wǎng)格控件導(dǎo)出到 Excel,數(shù)組導(dǎo)出到 Excel,CSV 導(dǎo)出到 Excel,你都會(huì)了嗎?需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • c#多線程之間的排他鎖的實(shí)現(xiàn)

    c#多線程之間的排他鎖的實(shí)現(xiàn)

    我們很多時(shí)候會(huì)碰到這樣的問題,使用多線程刷一個(gè)表的數(shù)據(jù)時(shí)需要多個(gè)線程不能重復(fù)提取數(shù)據(jù),那么這個(gè)時(shí)候就需要使用到線程的排他鎖了,本文就詳細(xì)的介紹一下
    2021-08-08
  • C#操作INI文件的輔助類IniHelper

    C#操作INI文件的輔助類IniHelper

    這篇文章主要為大家詳細(xì)介紹了C#操作INI文件的輔助類IniHelper,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • C#窗體布局方式詳解

    C#窗體布局方式詳解

    這篇文章主要介紹了C#窗體布局方式詳解的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • C#實(shí)現(xiàn)冒泡排序和插入排序算法

    C#實(shí)現(xiàn)冒泡排序和插入排序算法

    這篇文章介紹了C#實(shí)現(xiàn)冒泡排序和插入排序算法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • 實(shí)例講解C# 泛型(Generic)

    實(shí)例講解C# 泛型(Generic)

    這篇文章主要介紹了C# 泛型(Generic)的的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • C#面向?qū)ο缶幊袒A(chǔ)概念匯總

    C#面向?qū)ο缶幊袒A(chǔ)概念匯總

    今天小編就為大家分享一篇關(guān)于C#面向?qū)ο缶幊袒A(chǔ)概念匯總的文章,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • c# 基于任務(wù)的異步編程模式(TAP)的異常處理

    c# 基于任務(wù)的異步編程模式(TAP)的異常處理

    這篇文章主要介紹了c# 基于任務(wù)的異步編程模式的異常處理方法,幫助大家更好的理解和學(xué)習(xí)c#
    2020-11-11
  • C# Winform窗口之間傳值的多種方法淺析

    C# Winform窗口之間傳值的多種方法淺析

    這篇文章主要介紹了C# Winform窗口之間傳值的多種方法淺析,本文起講解了通過構(gòu)造器傳值、通過屬性傳遞、通過事件攜帶參數(shù)傳遞等方法,需要的朋友可以參考下
    2015-04-04
  • C#詞法分析器之構(gòu)造NFA詳解

    C#詞法分析器之構(gòu)造NFA詳解

    本篇文章介紹了,C#詞法分析器之構(gòu)造NFA詳解。需要的朋友參考下
    2013-05-05

最新評(píng)論