2010-04-23 76 views
1

如何從VB.net中找到已安裝應用程序的路徑,如果我知道應用程序exe文件的名稱? 謝謝!查找應用程序路徑

+2

你究竟是什麼意思? – SLaks 2010-04-23 13:18:52

回答

3

如果你的意思是任何應用程序(不是運行的應用程序),那麼除了在硬盤上搜索該文件的名稱外,沒有別的辦法。

如果你至少可以確信它在Program Files文件夾中,這應該會給你你所需要的。

string[] files = System.IO.Directory.GetFiles(
      Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), 
      "Yourexe.exe", System.IO.SearchOption.AllDirectories); 

這將返回到Program Files文件夾中具有該名稱的所有文件的路徑的字符串數組。

如果您不能假定它在Program Files中,那麼您可以替換任何目錄。

string rootDirectory = System.IO.DriveInfo.GetDrives()[0].RootDirectory.FullName; 

string[] files = System.IO.Directory.GetFiles(
      rootDirectory, 
      "Yourexe.exe", System.IO.SearchOption.AllDirectories); 

這將搜索整個主硬盤驅動器。再次,您可以用變量代替任何根路徑。

應該指出的是,這些選項相對較慢;不幸的是,如果不知道更多關於可能安裝的信息,則無法快速完成此操作。

4

這是如何找到正在執行的程序集的路徑,如果這是你在找什麼?

String strPath = System.IO.Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().CodeBase); 

[Visual Basic] 
Dim strPath As String = System.IO.Path.GetDirectoryName(_ 
System.Reflection.Assembly.GetExecutingAssembly().CodeBase) 

該鏈接將告訴你如何找到其他文件的路徑,如果你知道文件的名稱:

http://csharp.net-tutorials.com/file-handling/file-and-directory-information/

具體而言,這裏是從上面的鏈接的代碼片段找到可執行目錄中的文件:

FileInfo[] subFiles = di.GetFiles("*.exe", SearchOption.AllDirectories); 

您可以用可執行文件的名稱替換:「* .exe」。

2

如果您的代碼在application.exe中執行,您可以通過調用Assembly.GetExecutingAssembly().Location來獲取文件的位置(application.exe)。

0

如果你指的是應用程序的啓動路徑:

Application.StartupPath() 
  • 注:以上將無法正常工作,如果你想通過引用的程序集來訪問它

如果您指的是通過名稱搜索另一個應用程序,那麼我認爲沒有內置任何內容。您必須遍歷本地計算機上的文件。

0

如果我的理解正確,你想找到一個安裝在你的機器上的應用程序,但不是必需的。正在運行的應用程序?如果是這樣,你可以檢查註冊表...

對不起,這是在C#中,我不熟悉VB.Net。

public string GetApplicationPath(string appname) 
{ 
    using(Microsoft.Win32.RegistryKey key = Microsoft.Win32.RegistryKey.OpenRemoteBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, "")) 
    { 
     using(Microsoft.Win32.RegistryKey subkey = key.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\" + appname)) 
     { 
      if(subkey == null) 
       return ""; 

      object path = subkey.GetValue("Path"); 

      if(path!=null) 
       return (string)path; 
     } 

    } 
    return ""; 
} 

然後,您可以通過使用稱之爲:

路徑字符串= GetApplicationPath( 「Myexename.exe」);

1

正如其他人已經提到,如果你正在尋找自己的路徑,這是很容易的。如果你需要一個arbitary運行的應用程序的路徑,你可以嘗試這樣的事:

var procList = Process.GetProcesses().Where(process => process.ProcessName.Contains("notepad")); 

foreach (var process in procList) 
{ 
    Console.WriteLine("Path to {0}: {1}", process.ProcessName, Path.GetDirectoryName(process.MainModule.FileName)); 
} 

當您需要了解過程中的一些其他的信息,你應該看看到Process class

如果您正在尋找的應用程序未運行,您可以嘗試搜索Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)

或者您可以在註冊表路徑HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall內嘗試搜索以列出所有程序控制面板 - 添加/刪除程序

如果所有這些步驟都無助於找到您想要的應用程序,那麼除了全面掃描硬盤驅動器外,沒有其他方法(據我所知)。