C\#등록 표 지정 키 동작 가 져 오기

일부 프로그램 은 지정 한 운행 환경 에 의존 해 야 한다.그렇다면 레 지 스 트 를 읽 고 이 컴퓨터 가 실행 환경 이 있 는 지 판단 하 는 것 이 좋 은 방법 이다.모든 소프트웨어 가 설치 되면 레 지 스 트 에 해당 하 는 키 값 을 등록 하고 어떤 키 값 은 유일무이한 것 이기 때문이다.
프로그램 이 실행 되 기 전에 읽 고 판단 할 수 있 도록 구체 적 인 유일한 키 값 을 찾 아야 한다.
코드 는 다음 과 같 습 니 다:

class Program
 {
  private static string _sValue = string.Empty; 
  static void Main(string[] args)
  {
   Console.WriteLine("       :");
   _sValue = Console.ReadLine();
   Console.WriteLine($"    。。。");
 
   var registryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,
     Environment.Is64BitOperatingSystem ? RegistryView.Registry64 : RegistryView.Registry32); //      
   int i = 0;
   GetKeyNames(registryKey, ref i);
   Console.WriteLine($"    。。。");
   Console.ReadKey();
  }
 
  /// <summary>
  ///       
  /// </summary>
  /// <param name="subkey">  </param>
  /// <param name="i"></param>
  private static void GetKeyNames(RegistryKey subkey, ref int i)
  {
   foreach (var subkey_name in subkey.GetSubKeyNames()) //                 
   {
    try
    {
     using (RegistryKey csubkey = subkey.OpenSubKey(subkey_name))
     {
      GetValueName(csubkey, ref i);
      GetKeyNames(csubkey, ref i);
     }
    }
    catch { }
   }
  }
 
  /// <summary>
  ///            
  /// </summary>
  /// <param name="subkey">  </param>
  /// <param name="i"></param>
  private static void GetValueName(RegistryKey subkey, ref int i)
  {
   foreach (var name in subkey.GetValueNames()) //                     
   {
    var sValue = subkey.GetValue(name) + string.Empty;
    if (string.Compare(sValue, string.Format(@"{0}", _sValue, StringComparison.OrdinalIgnoreCase)) == 0)
    {
     Console.WriteLine(++i + "\t" + subkey.Name);
    }
   }
  }
 }
이제 E:\\ArcGIS\Python 27\ArcGISx 6410.2\\python.exe 키 를 찾 습 니 다:

결 과 는 다음 과 같다.

추가 지식:C\#레 지 스 트 리 지 를 방문 하여 소프트웨어 의 설치 경 로 를 얻 습 니 다.
절대 다수의 소프트웨어 는 기본적으로 등록 표 에 자신의 이름과 설치 경로 정 보 를 기록한다.
레 지 스 트 에 이 정 보 를 기록 하 는 위 치 는:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
따라서 우 리 는 등록 표 의 이 위치 에 접근 할 수만 있다 면 일부 소프트웨어 의 이름과 설치 경로 정 보 를 얻 을 수 있다.
이 블 로그 에 서 는 C\#레 지 스 트 를 방문 하여 소프트웨어 의 설치 경 로 를 가 져 와 표시 합 니 다.
1 예시 프로그램 메 인 화면 설명
예시 프로그램의 메 인 화면 은 아래 그림 과 같다.

화면 에 있 는 텍스트 상자 에 실행 가능 한 프로그램의 이름 을 입력 하고'경로 가 져 오기'단 추 를 누 르 면 화면의 다음 줄('경로 가 져 오기'단추 가 줄 에 있 는 다음 줄)에 프로그램의 전체 설치 경로 정 보 를 표시 합 니 다.
여기에 입력 한 실행 가능 한 파일 이름 은 Adobe Reader 가 레 지 스 트 에 있 는 이름 이'AcroRd 32.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.Win 32;
3 코드 설명
(1)코드"RegistryKey regKey=Registry.LocalMachine"은 regKey 가 레 지 스 트 메 인 키 HKEY 를 가리 키 게 합 니 다.LOCAL_MACHINE。
(2)코드"RegistryKey regSubKey=regKey.OpenSubKey(softPath+softName+".exe",false)"는 regSubKey 로 하여 금 우리 가 찾 아야 할 레 지 스 트 립 자 건 을 가리 키 게 합 니 다.
(3)코드"object object Result=regSubKey.GetValue(strKeyName)"에서 레 지 스 트 의 키 값 을 가 져 옵 니 다.
(4)코드"RegistryValueKind regValueKind=regSubKey.GetValueKind(strKeyName)"는 레 지 스 트 의 키 형식 을 가 져 옵 니 다.
(5)마지막 출력 에서 얻 은 키 정보.
(6)프로그램 이 잘못 되면"친구,프로그램 경 로 를 가 져 오 는 데 실 패 했 습 니 다!"라 는 안내 메 시 지 를 보 냈 다.
메모:RegistryKey.GetValue 와 RegistryKey.GetValueKind 방법 은 검색 할 값 의 이름 을 표시 하 는 매개 변 수 를 입력 해 야 합 니 다.RegistryKey.GetValue 와 RegistryKey.GetValueKind 방법 에 전 달 된 매개 변수 가 빈 문자열 일 때 이름 없 는 값 을 검색 합 니 다.레 지 스 트 편집기 에 이름 없 는 값 을 표시 할 때,이름 대신 문자열'(Default)'을 표시 합 니 다.
이 예 에서 들 어 오 는 것 은 빈 문자열 입 니 다.검색 소프트웨어 Adobe Reader 의 설치 정 보 를 예 로 들 면 다음 그림 의 첫 번 째 레 지 스 트 정 보 를 얻 을 수 있 습 니 다.이 때 이름 항목 은 문자열'(기본 값)'을 표시 합 니 다.

4 프로그램 실행 결과
(1)Adobe Reader 설치 경로 가 져 오기
"AcroRd 32"를 입력 하고"획득 경로"를 클릭 하면 다음 과 같은 결 과 를 얻 을 수 있 습 니 다.레 지 스 트 에 기 록 된 정보 와 일치 하지 않 습 니까?

(2)chrome 설치 경로 가 져 오기
"chrome"을 입력 하고"획득 경로"를 누 르 면 다음 과 같은 결 과 를 얻 을 수 있 습 니 다.레 지 스 트 에 기 록 된 정보 와 일치 하 는 것 이 아 닙 니까?

5.몇 마디 더 하 세 요.
개발 에 서 는 특정한 프로그램 을 지정 하여 특정한 작업 을 수행 할 때 레 지 스 트 정 보 를 읽 고 프로그램 을 열 수 있 습 니 다.다만 일부 프로그램 에 서 는 이러한 등록 정보 가 존재 하지 않 을 수도 있 습 니 다.이 럴 때 우 리 는 다른 방식 을 취해 야 합 니 다.
이상 의 C\#레 지 스 트 리 지 지정 키 조작 을 가 져 오 는 것 은 바로 편집장 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.참고 하 실 수 있 고 많은 응원 바 랍 니 다.

좋은 웹페이지 즐겨찾기