Получить папку config стороннего приложения Click-Once

В настоящее время я возлюсь с приложением Click-Once WPF. Это приложение стороннего разработчика, которое не было разработано мной. У меня также нет доступа к его источникам.

Он запускается на сервере Windows периодически и автоматически (с помощью самодельной программы запуска, написанной на стандартном C ++) путем выполнения соответствующей *.appref-ms ссылка, которая была размещена в меню «Пуск» при установке приложения. Это отлично работает.

Из-за периодически возникающих проблем с этим приложением моей программе запуска необходимо стереть все файлы конфигурации перед запуском, чтобы я всегда имел четко определенный запуск. Эти файлы помещаются в одну из папок приложения. Этот путь конфигурации для его параметров выглядит следующим образом (я нашел его, выполнив поиск по дереву AppData вручную):

C:\Users\<UserName>\AppData\Local\Apps\2.0\Data\WM4WPKCW.P5Z\67QVXD6C.0NT\<app>_f6187a2321850a68_0003.0004_1a67f9f1633c43fc\Data\AppFiles\

Обратите внимание, что этот путь конфигурации довольно отличается от пути приложения (в котором используются папки с разными именами):

C:\Users\<User>\AppData\Local\Apps\2.0\5HN2CKMO.MPL\YOL20MYR.O8L\<app>_f6187a2321850a68_0003.0004_f6ab8c93b3a43b7c\

Поскольку этот путь конфигурации изменяется при каждом обновлении приложения Click-Once, мне нужно автоматически находить его по коду (предпочтительно C ++). К сожалению, я не мог найти способ сделать это.

Как я могу заставить свой модуль запуска найти путь конфигурации приложения Click-Once на основе его *.appref-ms файл?

3

Решение

От Запись в блоге Рагхавендры Прабху «Часто задаваемые вопросы по настройке клиента»:

» Если вы хотите получить программный путь, вы можете сделать это с помощью API-интерфейса управления конфигурацией (вам нужно добавить ссылку на System.Configuration.dll). Например, вот как вы можете получить локальный путь к файлу user.config:

Configuration config =
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
Console.WriteLine("Local user config path: {0}", config.FilePath);

Код на C # (очевидно), но его не так сложно перевести на C ++ / CLI.

Рагхавендра Прабху также пишет:

» Если по какой-то причине вам необходимо сохранить настройки в другом месте, рекомендуется написать свой собственный SettingsProvider, Это довольно просто реализовать, и вы можете найти примеры в .NET 2.0 SDK, которые показывают, как это сделать. Имейте в виду, однако, что вы можете столкнуться с теми же проблемами изоляции, упомянутыми выше.

Отказ от ответственности: я не проверял ничего из этого.

1

Другие решения