Страницы

Поиск по вопросам

вторник, 7 января 2020 г.

Получение директории программы

#net


Всем доброго времени суток. 
Задача - получить адрес установленной программы (браузера), допустим, нам нужно поднять
operу, нужно получить адрес к ней.
Так как держать @"C:\Program Files (x86)\Opera\opera.exe" не есть гуд. 
Заранее спасибо.     


Ответы

Ответ 1



В дополнение к предыдущему ответу. GUID программы вряд ли будет известен заранее (а в некторых случаях это вовсе и не GUID), поэтому есть смысл поискать программу в этом разделе реестра по её названию (параметр 'DisplayName'). А интересующий вас параметр - это 'InstallLocation'. public static string GetLocation(string programName) { var uninstall = Registry.LocalMachine .OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"); if (uninstall == null) { return String.Empty; } foreach (string subKeyName in uninstall.GetSubKeyNames()) { using (var subKey = uninstall.OpenSubKey(subKeyName)) { if (subKey != null) { var keyValue = subKey.GetValue("DisplayName"); if (keyValue != null && keyValue.ToString() == programName) return subKey.GetValue("InstallLocation").ToString(); } } } return String.Empty; } И сразу же хочу сделать 2 замечания к этому коду: Сравнивать название программы в большинстве случаев не будет имет смысла, потому что в название обычно входит и версия. Скорее всего сравнение лучше заменить на String.StartsWith(). В 64-битной системе информация о всех программах, которые работают в WoW64-режиме будет находится в другом разделе HKLM: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall Поэтому в 64-битной системе есть смысл проверить два этих раздела.

Ответ 2



Универсально и хоть с какой-то гарантией - спросить у юзера :-) Если не универсально и без гарантии, то можно поискать где-то тут: HKLM/Software/Microsoft/Windows/CurrentVersion/Uninstall/{что-то}/InstallLocation P.S. {что-то} - это GUID программы, который нужно знать заранее. P.P.S. Или аналогично - в HKCU

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

Отправить комментарий