Как я могу найти местоположение файла в системном пути, например get-command или где?

#c# #windows #filepath

#c# #Windows #путь к файлу

Вопрос:

Я хочу узнать, доступна ли определенная DLL в системном пути. в Powershell я могу использовать get-command myfile.dll , и в cmd я могу использовать where myfile.dll .

Как я могу это сделать на C #? Должен ли я анализировать вручную Environment.GetEnvironmentVariable("path") , или есть лучший способ?

Комментарии:

1. Я не знаю, что для вас значит «лучше» , но AssocQueryString может сделать это за вас.

2. @IInspectable: Спасибо, но это приводит к множеству специфичных для оболочки поведений, которых я бы предпочел избегать.

Ответ №1:

Не уверен насчет where , но Get-Command внутренне разрешает местоположение файла, используя следующий алгоритм (чрезмерно упрощенный):

  1. Разбор Environment.GetEnvironmentVariable("PATH")
  2. Перечислите все файлы в каждой отдельной PATH записи с помощью Directory.EnumerateFiles()
  3. Выполните сравнение строк без учета регистра с именем входного файла для каждого имени файла в каталоге

Комментарии:

1. Спасибо, я думаю, мне остается самостоятельно реализовать эту логику. Я искал готовое решение, я думаю, что его нет.

2. Нет, проблема в том, что он встроен в функции загрузки библиотеки в Windows и не доступен напрямую. Я должен добавить, что Get-Command также разрешает системные каталоги и каталоги Windows перед поиском пути, более или менее как безопасные загрузки библиотеки