Tuesday, 11 March 2014

Определяем установочный каталог приложения

Существует, безусловно, несколько способов узнать куда именно установлена та или иная программа. Рассмотрим тот, который использует нативные функции 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