如何find已安装软件的执行path

我怎样才能find一个安装的软件在C#的执行path例如媒体播放器,VLC播放器。 我只需要find他们的执行path。 如果我有一个VLC播放器安装在我的D驱动器。 我如何从我的c#编码中findVLC.exe的path

此方法适用于位于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的方法一样,它只能找到一些可执行文件的路径

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

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

看看MsiEnumProductsEx

这个stackoverflow.com文章描述了如何获得与特定文件扩展名关联的应用程序。

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

我使用了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"; }