2009-05-26 59 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";   
    } 
相關問題