#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
внутренне разрешает местоположение файла, используя следующий алгоритм (чрезмерно упрощенный):
- Разбор
Environment.GetEnvironmentVariable("PATH")
- Перечислите все файлы в каждой отдельной
PATH
записи с помощьюDirectory.EnumerateFiles()
- Выполните сравнение строк без учета регистра с именем входного файла для каждого имени файла в каталоге
Комментарии:
1. Спасибо, я думаю, мне остается самостоятельно реализовать эту логику. Я искал готовое решение, я думаю, что его нет.
2. Нет, проблема в том, что он встроен в функции загрузки библиотеки в Windows и не доступен напрямую. Я должен добавить, что
Get-Command
также разрешает системные каталоги и каталоги Windows перед поиском пути, более или менее как безопасные загрузки библиотеки