您的位置:首页 > 编程语言 > C#

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#
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: