如何查找已安装软件的执行路径

时间:2009-05-26 10:05:10

标签: c# windows

如何在c#中找到已安装软件的执行路径,例如媒体播放器,vlc播放器。我只需要找到他们的执行路径。如果我的D驱动器中安装了vlc播放器。如何从我的c#编码

中找到VLC.exe的路径

6 个答案:

答案 0 :(得分:10)

使用C#代码,您可以通过以下方式找到某些可删除的路径:

private const string keyBase = @"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths";
private string GetPathForExe(string fileName)
{
    RegistryKey localMachine = Registry.LocalMachine;
    RegistryKey fileKey = localMachine.OpenSubKey(string.Format(@"{0}\{1}", keyBase, fileName));
    object result = null;
    if (fileKey != null)
    {
        result = fileKey.GetValue(string.Empty);
        fileKey.Close();
    }


    return (string)result;
}

像这样使用它:

string pathToExe = GetPathForExe("wmplayer.exe");

但是,很可能您想要的应用程序没有App Paths密钥。

答案 1 :(得分:5)

此方法适用于位于windows PATH变量中定义的文件夹中的任何可执行文件:

private string LocateEXE(String filename)
{
    String path = Environment.GetEnvironmentVariable("path");
    String[] folders = path.Split(';');
    foreach (String folder in folders)
    {
        if (File.Exists(folder + filename))
        {
            return folder + filename;
        } 
        else if (File.Exists(folder + "\\" + filename)) 
        {
            return folder + "\\" + filename;
        }
    }

    return String.Empty;
}

然后按如下方式使用:

string pathToExe = LocateEXE("example.exe");

与Fredrik的方法一样,它只查找某些可执行文件的路径

答案 2 :(得分:1)

我使用了CurrentVersion \ Installer \ Folders注册表项。只需传入产品名称即可。

private string GetAppPath(string productName)
    {
        const string foldersPath = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\Folders";
        var baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);

        var subKey = baseKey.OpenSubKey(foldersPath);
        if (subKey == null)
        {
            baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
            subKey = baseKey.OpenSubKey(foldersPath);
        }
        return subKey != null ? subKey.GetValueNames().FirstOrDefault(kv => kv.Contains(productName)) : "ERROR";          
    }

答案 3 :(得分:0)

答案 4 :(得分:0)

This stackoverflow.com article描述了如何使应用程序与特定文件扩展名相关联。

也许您可以使用此技术来获取与某些扩展相关联的应用程序,例如avi或wmv - Medial Player或您的VLC播放器吗?

答案 5 :(得分:0)

没有一个答案对我有用。经过数小时的在线搜索,我能够成功获取安装路径。这是最终代码。

public static string checkInstalled(string findByName)
    {
        string displayName;
        string InstallPath;
        string registryKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";

        //64 bits computer
        RegistryKey key64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
        RegistryKey key = key64.OpenSubKey(registryKey);

        if (key != null)
        {
            foreach (RegistryKey subkey in key.GetSubKeyNames().Select(keyName => key.OpenSubKey(keyName)))
            {
                displayName = subkey.GetValue("DisplayName") as string;
                if (displayName != null && displayName.Contains(findByName))
                {

                    InstallPath = subkey.GetValue("InstallLocation").ToString();

                    return InstallPath; //or displayName

                }
            }
            key.Close();
        }

        return null;
    }

您可以像这样调用此方法

string JavaPath = Software.checkInstalled("Java(TM) SE Development Kit");

和繁荣。干杯