2009-05-26 94 views
2

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

+1

你的意思是你想通过注册表? – annakata 2009-05-26 10:08:23

+0

是的我怎么能从c# – Arunachalam 2009-05-26 10:09:04

回答

2

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

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

喜欢的Fredrik的方法只找到路径:

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

然后如下使用它对于某些可执行文件

8

使用C#代码,你可以找到一些excutables的路径是这样的:

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

然而,它可能很好,你想要的应用程序没有应用程序路径键。

+0

谢谢,这是我需要的。 – 2017-07-18 20:36:06

0

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

也许你可以使用这种技术来获得与特定扩展名相关的应用程序,例如avi或wmv--无论是Medial Player还是您的情况下的VLC播放器?

0

我使用了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";   
    } 
相关问题