C# 获取常见软件的安装路径(调用注册表)
2013-04-11 11:20
966 查看
转自http://www.cnblogs.com/ustcwhc/archive/2011/11/18/2254367.html
很多软件安装位置不一样,但是他们基本上会在注册表的同一个位置写下自己的名字和程序路径,这个位置就是:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
所以只要去这个地方找软件路径就可以了。
你可以添加你知道的正确的文件名,就是它在注册表中的名字。比如office word在注册表中叫winword
最终拿到的是那个exe的完全路径,如果要文件夹的话就用Path.GetDirectoryName()就行了
public enum Softwares
{
//The names are the same with the registry names.
//You can add any software exists in the "regedit" path:
//HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
EXCEL, //Office Excel
WINWORD, //Office Word
MSACCESS, //Office Access
POWERPNT, //Office PowerPoint
OUTLOOK, //Office Outlook
INFOPATH, //Office InfoPath
MSPUB, //Office Publisher
VISIO, //Office Visio
IEXPLORE, //IE
ITUNES //Apple ITunes
//.........
}
public class SoftwareOperator
{
//When you do not want to use string name, then use the Enum instead
public static bool TryGetSoftwarePath(Softwares
softName, out string path)
{
return TryGetSoftwarePath(softName.ToString(),
out path);
}
public static bool TryGetSoftwarePath(string
softName, out string path)
{
string strPathResult =
string.Empty;
string strKeyName =
""; //"(Default)" key, which contains the intalled path
object objResult =
null;
Microsoft.Win32.RegistryValueKind regValueKind;
Microsoft.Win32.RegistryKey regKey =
null;
Microsoft.Win32.RegistryKey regSubKey =
null;
try
{
//Read the key
regKey = Microsoft.Win32.Registry.LocalMachine;
regSubKey = regKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\"
+ softName.ToString() + ".exe",
false);
//Read the path
objResult = regSubKey.GetValue(strKeyName);
regValueKind = regSubKey.GetValueKind(strKeyName);
//Set the path
if (regValueKind == Microsoft.Win32.RegistryValueKind.String)
{
strPathResult = objResult.ToString();
}
}
catch (System.Security.SecurityException
ex)
{
throw new System.Security.SecurityException("You have no right to read the registry!", ex);
}
catch (Exception
ex)
{
throw new Exception("Reading registry error!", ex);
}
finally
{
if (regKey !=
null)
{
regKey.Close();
regKey = null;
}
if (regSubKey !=
null)
{
regSubKey.Close();
regSubKey = null;
}
}
if (strPathResult !=
string.Empty)
{
//Found
path = strPathResult;
return true;
}
else
{
//Not found
path = null;
return false;
}
}
}
分类:
C#
很多软件安装位置不一样,但是他们基本上会在注册表的同一个位置写下自己的名字和程序路径,这个位置就是:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
所以只要去这个地方找软件路径就可以了。
你可以添加你知道的正确的文件名,就是它在注册表中的名字。比如office word在注册表中叫winword
最终拿到的是那个exe的完全路径,如果要文件夹的话就用Path.GetDirectoryName()就行了
public enum Softwares
{
//The names are the same with the registry names.
//You can add any software exists in the "regedit" path:
//HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
EXCEL, //Office Excel
WINWORD, //Office Word
MSACCESS, //Office Access
POWERPNT, //Office PowerPoint
OUTLOOK, //Office Outlook
INFOPATH, //Office InfoPath
MSPUB, //Office Publisher
VISIO, //Office Visio
IEXPLORE, //IE
ITUNES //Apple ITunes
//.........
}
public class SoftwareOperator
{
//When you do not want to use string name, then use the Enum instead
public static bool TryGetSoftwarePath(Softwares
softName, out string path)
{
return TryGetSoftwarePath(softName.ToString(),
out path);
}
public static bool TryGetSoftwarePath(string
softName, out string path)
{
string strPathResult =
string.Empty;
string strKeyName =
""; //"(Default)" key, which contains the intalled path
object objResult =
null;
Microsoft.Win32.RegistryValueKind regValueKind;
Microsoft.Win32.RegistryKey regKey =
null;
Microsoft.Win32.RegistryKey regSubKey =
null;
try
{
//Read the key
regKey = Microsoft.Win32.Registry.LocalMachine;
regSubKey = regKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\"
+ softName.ToString() + ".exe",
false);
//Read the path
objResult = regSubKey.GetValue(strKeyName);
regValueKind = regSubKey.GetValueKind(strKeyName);
//Set the path
if (regValueKind == Microsoft.Win32.RegistryValueKind.String)
{
strPathResult = objResult.ToString();
}
}
catch (System.Security.SecurityException
ex)
{
throw new System.Security.SecurityException("You have no right to read the registry!", ex);
}
catch (Exception
ex)
{
throw new Exception("Reading registry error!", ex);
}
finally
{
if (regKey !=
null)
{
regKey.Close();
regKey = null;
}
if (regSubKey !=
null)
{
regSubKey.Close();
regSubKey = null;
}
}
if (strPathResult !=
string.Empty)
{
//Found
path = strPathResult;
return true;
}
else
{
//Not found
path = null;
return false;
}
}
}
分类:
C#
相关文章推荐
- C# 获取常见软件的安装路径(调用注册表)
- C# 获取常见软件的安装路径(调用注册表)
- C# 获取常见软件的安装路径(调用注册表)
- C#获取常见软件的安装路径(调注册表)
- c#获取安装的软件和路径(注册表)
- c#获取安装的软件和路径(注册表)
- 利用C#访问注册表获取软件的安装路径
- c#获取安装的软件和路径(注册表)
- C#读取注册表,获取本机安装的软件清单
- 调用Windows接口访问注册表来获取程序安装路径
- c#获取软件在注册表中的安装信息
- 根据注册表获取软件安装路径
- C++编程实现从注册表中获取程序安装路径并调用exe文件
- C++编程实现从注册表中获取程序安装路径并调用exe文件
- 工作问题积累(九)C++:实现从注册表中获取程序安装路径并调用exe文件
- C++编程实现从注册表中获取程序安装路径并调用exe文件。
- C++编程实现从注册表中获取程序安装路径并调用exe文件
- VC++获取Windows已安装软件——注册表方式
- VC 获取Windows已安装软件(注册表方式)
- 关于Smart Install Maker通过获取注册表自动填写上次的安装路径