查找应用程序路径

时间:2010-04-23 13:16:15

标签: c# .net vb.net

如果我知道应用程序exe文件的名称,如何从VB.net找到已安装应用程序的路径? 谢谢!

6 个答案:

答案 0 :(得分:5)

如果您正在寻找的话,这就是您如何找到执行程序集的路径?

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”替换为可执行文件的名称。

答案 1 :(得分:4)

如果您指的是任意应用程序(不是正在运行的应用程序),除了在硬盘驱动器上搜索该.exe文件名之外别无他法。

如果您至少可以确信它位于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);

这将搜索整个主硬盘。同样,您可以替换rootDirectory变量的任何根路径。

应该指出的是,这些选择相对较慢;遗憾的是,如果不了解有关可能的安装位置的更多信息,就无法快速完成此任务。

答案 2 :(得分:3)

如果您的代码在application.exe中执行,您可以通过调用Assembly.GetExecutingAssembly().Location来获取文件(application.exe)的位置。

答案 3 :(得分:1)

如果我理解正确,您希望找到计算机上安装的应用程序,但不是必需的。正在运行的应用程序?如果是这样,你可以检查注册表......

抱歉这是在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 "";
}

然后你可以使用:

来调用它

string path = GetApplicationPath(“Myexename.exe”);

答案 4 :(得分:1)

正如其他人已经提到过的,如果你正在寻找自己的道路,这很容易。如果你需要一个正在运行的应用程序的路径,你可以尝试这样的事情:

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内进行搜索,以枚举控制面板 - 添加/删除程序中列出的所有程序。

如果所有这些步骤都没有帮助找到您想要的应用程序,那么除了对硬盘驱动器进行全面扫描外,没有其他办法(据我所知)。

答案 5 :(得分:0)

如果您指的是应用程序的启动路径:

Application.StartupPath()
  • 注意:如果您尝试通过引用的程序集
  • 访问它,则上述操作无效

如果您指的是通过其名称搜索其他应用程序,那么我认为没有内置任何内容。您必须遍历本地计算机上的文件。