#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
Комментариев нет:
Отправить комментарий