代码之家  ›  专栏  ›  技术社区  ›  Arunachalam

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

  •  4
  • Arunachalam  · 技术社区  · 17 年前

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

    5 回复  |  直到 8 年前
        1
  •  5
  •   RobV    17 年前

    此方法适用于Windows路径变量中定义的文件夹中的任何可执行文件:

    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
  •  9
  •   schmoopy    8 年前

    使用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");
    

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

        3
  •  0
  •   joshcomley    17 年前
        4
  •  0
  •   Community Mohan Dere    9 年前

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

    也许您可以使用这种技术来获得与某些扩展相关的应用程序,比如avi或wmv——中间播放器还是vlc播放器?

        5
  •  0
  •   Country Don    8 年前

    我使用了当前版本\安装程序\文件夹注册表项。只需输入产品名称。

    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";          
        }