все что связано с моей работой
Главная » Учебник WiX » Куда установлено?

Куда установлено?

“Цельные” приложения (имеются ввиду “неделимые”, standalone) будут установлены в свои папки в \Program Files — мы уже видели, как это делается. Но плагины, дополнения или другие дополнительные продукты для общего использования (shared), которые необходимы для других программ, уже установленных в системе (или Ваших приложений, или других сторонних разработчиков), должны выяснить, перед установкой, куда себя устанавливать. Вариант, когда пользователь предоставляет эту информацию, был бы и неэлегантен и возможно опасен в некоторых случаях; таким образом, мы нуждаемся в средствах просмотра реестра, чтобы проверить .ini файлы, уже установленные в системе, или определить место фактического расположения приложения.
Когда мы будем искать любой из этих элементов, результат будет сохраняться в свойстве (строковая переменная). Так, мы запускаем, определяя свойство (заметьте, что Id, который мы используем, является тем же самым именем, которое мы уже использовали в нашем первом примере, обозначая целевую папку, в которую мы установили наше приложение). В теге Property мы запускаем поиск в реестре. Атрибуты говорят сами за себя:


  

Если поиск реестра был успешен (то есть, определенный ключ реестра действительно существует), его значение будет присвоено нашему свойству INSTALLDIR. Чтобы проверить это, добавьте эту строку после тега Media в нашем предыдущем примере и сохраните в SampleRegistry.wxs (просто загрузите). Скомпилируйте его, но прежде, чем Вы запустите установку, запустите редактор реестра и создайте ключ “HKEY_LOCAL_MACHINE\SOFTWARE\Acme\Foobar 1.0”. Создайте новый строковый параметр с именем InstallDir и создайте пустую папку в любом месте, укажите путь к ней и значение созданного параметра реестра. Запустите установку с включенным журналированием.
Если Вы сделали все правильно, то три наших файла из примера появятся в этой новой папке. Также отметьте, что ярлыки в Меню «Пуск» и на Рабочем столе, указывают на это новое расположение.
Подобная информация может быть взята из других источников. Предположим, что есть файл \Windows\SampleRegistry.ini (Вы можете только читать эти файлы, если они находятся в системной папке):

[Sample]
InstallDir=C:\InstallHere

Замените предыдущий код этим новым:


  

Могут быть случаи, когда просто знать папку недостаточно. Вы должны проверить папку и удостовериться, что данный файл там существует. Depth = n может использоваться, чтобы указать установщику смотреть n уровней глубже, чем указанный в Path. Если установить Depth=0 или он вообще будет отсутствовать, то это будет означать, что просмотр будет только в указанной папке. Мы используем квадратные скобки в Path, чтобы указать установщику использовать значение свойства INSTALLDIR — заключенные в скобки имена будут заменены на их фактическое значение, если поиск удачен. И останутся неизменными в противном случае.


  
    
  

Если файл был найден, его полный путь будет присвоен свойству FILEEXISTS, иначе оно останется неизменным. Вы можете проверить это, скомпилировав этот пример (Вы должны заменить оба предыдущих RegistrySearch на этот фрагмент), и затем запустив установку с включенным журналированием. Заметьте, что Вы должны сначала создать файл Lookfor.txt в папке, которую определили в реестре, журнал будет содержать ссылку на FILEEXISTS с полным путем файла как его значение.
Хотя у нас еще нет пользовательского интерфейса, но стоит отметить, что свойства получали свое значение без любого взаимодействия с пользователем, из общедоступных свойств, передавая значения логике установки (например, папки для установки). Чтобы указать их общедоступное состояние, их имя должно быть написано прописными буквами.
Стоит также отметить, что Windows Installer имеет лучшие способы обновления продукта, чем искать конкретные записи реестра от предыдущей установки. Вы должны будете использовать эти возможности, но вам нужно немного терпения, пока мы не дойдем до них в ходе нашего обучения.

Комментариев нет

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.