我怎样才能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"; }