Я бы сделал это так.
Конечно ваше приложение сохраняет папку установки в реестре при установке. Затем ваш языковой пакет ищет эту запись реестра.
- Если место установки не сохранено в реестре, ваше приложение не установлено: сообщите об ошибке и выйдите.
- В противном случае вы знаете, куда скопировать языковые файлы, поэтому приступайте к установке языкового пакета.
У вашего языкового пакета будет отдельная запись в разделе "Установка и удаление программ".
Если вам это не нужно, есть два других варианта:
- Зарегистрируйте языковой пакет как обновление вашего приложения. Затем он будет отображаться только тогда, когда пользователь решит просмотреть установленные обновления.
Как это сделать, описано в Фильтрация списка "Установка и удаление программ".
- Скройте свой пакет из «Установки и удаления программ». В этом случае вы должны указать другой способ удаления пакета.
Есть еще одна вещь: деинсталлятор для вашего основного приложения должен (может) предоставлять опции для удаления всех установленных языковых пакетов. Вы же не хотите, чтобы пользователи удаляли их вручную, верно?
Это сложно. Самый простой подход, который приходит мне на ум, заключается в том, что ваш основной деинсталлятор перечисляет установленные языковые пакеты и планирует их удаление. Тем не менее, это может быть неудобным для UAC.
Подходы к реализации удаления языковых пакетов зависят от того, как эти пакеты создаются. Если у вашего деинсталлятора есть загрузчик, .exe, а не голый .msi, то это может быть довольно просто. Загрузчик инициирует процесс удаления основного приложения. В случае успеха он переходит к удалению языковых пакетов. И это было бы удобно для UAC: загрузчик запрашивает повышение прав при запуске, поэтому все процессы, которые он запускает, также будут повышены.
person
Alexey Ivanov
schedule
14.03.2012