C#访问注册表的安装路径

绝大多数软件,基本上都会在注册表中记录自己的名字和安装路径信息。

在注册表中记录这些信息的位置是:

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

因此,我们只要能访问到注册表的这个位置,就可以获取到某些软件的名称和安装路径信息。

本博文使用C#访问注册表获取软件的安装路径并进行显示。

1 示例程序主画面说明

示例程序主画面如下图所示。

 

在画面中的文本框中输入可执行程序的名称,点击“获取路径”按钮,便会在画面中的下一行(“获取路径”按钮所在行的下一行)显示出该程序完整的安装路径信息。这里输入的可执行文件名称必须是程序在注册表中的名称,如Adobe Reader在注册表中的名称为“AcroRd32.exe”。

2 示例程序完整代码

[csharp] view plain copy
print ?
  1. using System;  
  2. using System.Windows.Forms;  
  3. using Microsoft.Win32;  
  4.    
  5. namespace GetSoftWarePathExp  
  6. {  
  7.     public partial class Form1 : Form  
  8.     {  
  9.         public Form1()  
  10.         {  
  11.             InitializeComponent();  
  12.         }  
  13.    
  14.         private void button1_Click(object sender, EventArgs e)  
  15.         {  
  16.             try  
  17.             {  
  18.                 string softName = textBox1.Text.ToString();  
  19.                 string strKeyName = string.Empty;  
  20.                 string softPath = @“SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\”;  
  21.                 RegistryKey regKey = Registry.LocalMachine;  
  22.                 RegistryKey regSubKey = regKey.OpenSubKey(softPath + softName + ”.exe”false);  
  23.    
  24.                 object objResult = regSubKey.GetValue(strKeyName);  
  25.                 RegistryValueKind regValueKind = regSubKey.GetValueKind(strKeyName);  
  26.                 if (regValueKind == Microsoft.Win32.RegistryValueKind.String)  
  27.                 {  
  28.                     this.label3.Text = objResult.ToString();  
  29.                 }  
  30.             }  
  31.             catch  
  32.             {  
  33.                 this.label3.Text = “朋友,获取程序路径失败!”;  
  34.             }  
  35.         }  
  36.     }  
  37. }  
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 指向注册表主键HKEY_LOCAL_MACHINE。

(2)代码“RegistryKey regSubKey = regKey.OpenSubKey(softPath + softName + ”.exe”, false)”使regSubKey 指向我们需要查找的注册表子健。

(3)代码“object objResult = 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的安装路径

输入“AcroRd32”,点击“获取路径”,得到以下结果,是不是和注册表中记录的信息一致啊。

 

(2)获取chrome的安装路径

输入“chrome”,点击“获取路径”,得到以下结果,是不是和注册表中记录的信息一致啊。

 

多说两句

在开发中,有时会指定特定程序来执行某类操作,这时可能会涉及读取注册表信息来打开程序。只是有些程序可能不存在这样的注册信息,这时,我们就必须采取其他方式了。

绝大多数软件,基本上都会在注册表中记录自己的名字和安装路径信息。

在注册表中记录这些信息的位置是:

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

因此,我们只要能访问到注册表的这个位置,就可以获取到某些软件的名称和安装路径信息。

本博文使用C#访问注册表获取软件的安装路径并进行显示。

1 示例程序主画面说明

示例程序主画面如下图所示。

 

在画面中的文本框中输入可执行程序的名称,点击“获取路径”按钮,便会在画面中的下一行(“获取路径”按钮所在行的下一行)显示出该程序完整的安装路径信息。这里输入的可执行文件名称必须是程序在注册表中的名称,如Adobe Reader在注册表中的名称为“AcroRd32.exe”。

2 示例程序完整代码

[csharp] view plain copy
print ?
  1. using System;  
  2. using System.Windows.Forms;  
  3. using Microsoft.Win32;  
  4.    
  5. namespace GetSoftWarePathExp  
  6. {  
  7.     public partial class Form1 : Form  
  8.     {  
  9.         public Form1()  
  10.         {  
  11.             InitializeComponent();  
  12.         }  
  13.    
  14.         private void button1_Click(object sender, EventArgs e)  
  15.         {  
  16.             try  
  17.             {  
  18.                 string softName = textBox1.Text.ToString();  
  19.                 string strKeyName = string.Empty;  
  20.                 string softPath = @“SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\”;  
  21.                 RegistryKey regKey = Registry.LocalMachine;  
  22.                 RegistryKey regSubKey = regKey.OpenSubKey(softPath + softName + ”.exe”false);  
  23.    
  24.                 object objResult = regSubKey.GetValue(strKeyName);  
  25.                 RegistryValueKind regValueKind = regSubKey.GetValueKind(strKeyName);  
  26.                 if (regValueKind == Microsoft.Win32.RegistryValueKind.String)  
  27.                 {  
  28.                     this.label3.Text = objResult.ToString();  
  29.                 }  
  30.             }  
  31.             catch  
  32.             {  
  33.                 this.label3.Text = “朋友,获取程序路径失败!”;  
  34.             }  
  35.         }  
  36.     }  
  37. }  
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 指向注册表主键HKEY_LOCAL_MACHINE。

(2)代码“RegistryKey regSubKey = regKey.OpenSubKey(softPath + softName + ”.exe”, false)”使regSubKey 指向我们需要查找的注册表子健。

(3)代码“object objResult = 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的安装路径

输入“AcroRd32”,点击“获取路径”,得到以下结果,是不是和注册表中记录的信息一致啊。

 

(2)获取chrome的安装路径

输入“chrome”,点击“获取路径”,得到以下结果,是不是和注册表中记录的信息一致啊。

 

多说两句

在开发中,有时会指定特定程序来执行某类操作,这时可能会涉及读取注册表信息来打开程序。只是有些程序可能不存在这样的注册信息,这时,我们就必须采取其他方式了。

猜你喜欢

转载自blog.csdn.net/qq_27445903/article/details/80401102