Существует, безусловно, несколько способов узнать куда именно установлена та или иная программа. Рассмотрим тот, который использует нативные функции MSI.
Воспользуемся функцией MsiGetComponentPath, определённой в компоненте MSI.dll. Нам понадобится Product Id Приложения, и Component Id какого-либо из его компонентов. Оба - гуиды, которые известны для некоторых приложений, и поддаются гуглёжке. Для других придётся вскрывать инсталлятор чем-то вроде Orca.
Импортируем нативный метод в C#-код:
[DllImport("MSI.DLL", CharSet = CharSet.Auto)] private static extern UInt32 MsiGetComponentPath( string szProduct, string szComponent, StringBuilder lpPathBuf, ref int pcchBuf);
Далее создаём метод-обёртку для более удобного использования:
public static string GetInstallationPath(string productId, string componentId) { string componentPath = GetComponentPath(productId, componentId);
if (String.IsNullOrEmpty(componentPath)) { return String.Empty; } return Path.GetDirectoryName(componentPath); }
Можем пользоваться:
private string path = GetInstallationPath( "{B7BC7C6F-9A4E-4973-BE84-ECA8E3427C97}", "{4093449C-7949-4E96-B071-2AADB06EFC12}");
Обращаем внимание на формат GUID - они должны быть именно такие, с фигурными скобками.
No comments:
Post a Comment