Опять-таки, дела давно минувших дней. Но обещал написать примеры сборки msi пакетов на WiX, посему – пишу.

Возникла в своё время проблема с перемещаемыми профилями пользователей. На примере Outlook 2003 расскажу. Это счастье сохраняет при конфигурировании полный путь к своим файлам автономных папок вида C:\Documents and Settings\sergey.s.betke\Local Settings\Application Data\Microsoft\Outlook\outlook.ost. Вместо того, чтобы использовать что-то типа %APPDATA%\Microsoft\Outlook\outlook.ost или %USERPROFILE%\Local Settings\Application Data\Microsoft\Outlook\outlook.ost разворачивает путь полностью. И при попытке подставить переменную в реестре – ругается и не работает.

Решим эту проблему для всех подобных приложений в масштабах домена.

Решение на самом деле простейшее. Подцепляем диск Z: в logon скрипте пользователя к %USERPFOFILE%, и все “не очень совместимые” с перемещаемыми профилями  пользователей приложения настраиваем политиками на использование диска Z: вместо профиля пользователя.

Сам сценарий примитивен:

subst z: "%USERPROFILE%"

После чего могу подключать ресурсы в профиле пользователя следующим образом: Z:\Local Settings\Application Data\Microsoft\Outlook\outlook.ost.

Поэтому на первом этапе так и решал: создал политику, в неё разместил itgConnectProfile.cmd с указанным выше содержимым, повесил его как logon скрипт пользователя – и вуаля. Но проблемы начались позднее. Рассмотрим ноутбук и сотрудника в командировке. Загружаем операционку – и сценария нет (просто до файла сценария не добраться). Соответственно, диск Z: не подключен, и Outlook свой автономных папок не находит и так далее. Что же делать?

Тут нам и приходит на помощь WiX. Соберём msi пакет, который раскинет указанный выше сценарий по станциям, пропишет его в автозапуск в реестре пользователя – и закроем проблему таким образом.

Использовать будем платформу windows installer, для распространения приложения можем использовать GPO или иные средства, благо msi даёт нам широкий выбор средств развёртывания. Для разработки используем MS Visual Studio Shell и WiX .

Заранее прошу — если будете качать и пользоваться, оставьте по результатам комментарии. Если потребуется что-либо добавить — сообщайте, добавим.

Начну сразу с конца, чтобы интереснее читать было. Идём ко мне на ftp://ftp.novgaro.ru/AMF/DSL/ITG/ConnectProfileAsZ/. Видим там кучу папок. Заходим в крайний релиз. Видим папки Prg и Prj. Папку Prj Вы можете честно качать себе целиком, и открывать в Visual Studio файл проекта (.wixproj).

Естественно, предварительно необходимо установить установить MS Visual Studio Shell и WiX уже к студии. Замечу, что нам подойдёт только сама среда (shell) студии – нам ведь нет необходимости использовать какие-либо компиляторы, нам нужен только бесплатный WiX. Качаем shell студии MS Visual Studio Shell и WiX (ссылка для закачки) к нему. Теперь мы можем открыть проект.

В папке Prg\adm можно найти уже подготовленную административную точку развёртывания msi пакета, скомпилированного WiX. Копируете папку целиком, и разворачиваете пакет на рабочие станции через GPO – и будем Вам счастье :-).

Вернёмся к задаче. Файл проекта:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Product
    Id="EF81BAEB-8688-403C-BE09-A1FFCED66830"
      Manufacturer="ГАРО-ITG"
      Name="[ГАРО-ITG] ITG - подключение профиля как z:"
      Language="1049"
      Version="1.00.001"
      Codepage="1251"
    UpgradeCode="717DCFD6-3B74-4AEE-806A-6039C27B0E7C"
  >
    <Package
      InstallerVersion="100"
      Compressed="no"
      AdminImage="yes"
      InstallScope="perUser"
      InstallPrivileges="elevated"
      Languages="1049"
      Manufacturer="ГАРО-ITG"
      SummaryCodepage="1251"
      Comments="Пакет для подключения профиля пользователя как диска Z:"
      Description="Пакет для подключения профиля пользователя как диска Z:"
    />

    <Media Id="1" EmbedCab="no" />

    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="WindowsFolder" Name="Windows"/>
    </Directory>

    <ComponentGroup Id="ConnectProfile">
      <Component Id="RunRecord" Guid="*" Directory="TARGETDIR" Location="local" Permanent="no">
        <RegistryKey Root="HKCU" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Run" Action="none">
          <RegistryValue KeyPath="yes" Name="itgConnectProfileAsZ" Type="string" Value="[#connectProfileScript]" />
        </RegistryKey>
      </Component>

      <Component Id="RunScript" Guid="*" Directory="WindowsFolder" Location="local" Permanent="no">
        <File Id="connectProfileScript" KeyPath="yes" Vital="yes" Name="itgConnectProfile.cmd" Source="SourceDir\Windows\itgConnectProfile.cmd"/>
      </Component>
    </ComponentGroup>

    <Feature Id="itgConnectProfileAsZ" Title="Подключение профиля пользователя как Z:" Level="1" AllowAdvertise="no" InstallDefault="local" TypicalDefault="install">
      <ComponentGroupRef Id="ConnectProfile"/>
    </Feature>

    <Upgrade Id="717DCFD6-3B74-4AEE-806A-6039C27B0E7C">
      <UpgradeVersion Minimum="1.0.0" IncludeMinimum="yes" Property="OLDPRODUCT"/>
    </Upgrade>

    <!--<Icon Id="ITG.ico" src="SourceDir\Icon\ITG.ico" />-->

    <InstallExecuteSequence>
      <RemoveExistingProducts After="InstallValidate"/>
    </InstallExecuteSequence>

    <Property Id="ARPHELPTELEPHONE" Value="269, 338, 325"/>
    <Property Id="ARPCOMMENTS"><![CDATA[Пакет для подключения профиля пользователя как диска Z:. Используется приложениями, сохраняющими в перемещаемом реестре пользователя абсолютные пути в профиле пользователя.]]></Property>
    <!--<Property Id="ARPPRODUCTICON" Value="App.ico"/>-->

    <Property Id="INSTALLLEVEL" Value="100" />

    <Property Id="ARPURLINFOABOUT" Value="http://sergey-s-betke.blogs.novgaro.ru/userprofile-as-z"/>
    <Property Id="ARPHELPLINK" Value="http://sergey-s-betke.blogs.novgaro.ru/userprofile-as-z" />
    <Property Id="ARPCONTACT" Value="sergey.s.betke@novgaro.ru" />

  </Product>
</Wix>

Как видно, пакет простейший. Копирует один файл и делает одну запись в реестре. Через политику его назначать следует на пользователя, не на ПК, иным способом обеспечить автозапуск вместе с сессией пользователя будет сложно.

Собственно говоря – that’s all. Сценарий по рабочим станциям домена раскинут, и даже если они будут использоваться за пределами сети (мобильные пользователи в командировке), все приложения смогут прекрасно использовать диск Z: как профиль пользователя. И мы можем гарантировать, что при перемещении профиля пользователя на другую машину, скажем – с другой буквой системного раздела, проблем не возникнет.

Отзывы » (10)

  1. Провел полдня в безуспешных способах запустить devenv.exe из установленной VS2010. При потытк е запуска пишет: “недопустимые данные лицензии/ требуется переустановка”. 100500 раз переустановил. Выполнял шаманские действия с реестром, которые удалось нагуглить, – результат нулевой. а сейчас вообще наткнулся на следующее: “The isolated shell and integrated shell are not meant to be directly used by end users. They are for ISVs or Visual Studio extenders to build on top of.

    If you install the isolated shell, you cannot just run devenv.exe. A VS extender is supposed to create his or her own stub .exe to replace devenv.exe. Devenv.exe should never have been included in the isolated shell product”

    Та как ее вообще запускать эту VS2010 или этого вообще не требуется???

  2. VS2008 скачан, установлен и нормально стартует. Потыркал мышкой по интерфейсу, скачал ваш проект на «посмотреть». Меня терзают смутные сомнения: проект (xml-файл), который опубликован в этом посте, пишется «руками»? Никаких средств автоматизации, типа окошек , предлагающих заполнить поля объектов, получив на выходе xml-файл (годный для последующей работы), не существует?

    • Почему же я ждал подобного вопроса? :-) WiX, файл проекта которого мы и обсуждаем, — средство с открытым кодом. По сути и был «открыт» для того, чтобы уже посредством его можно было городить всевозможные «мастера» для сборки msi. Но любой мастер ограничит возможности своего посредника.
      На самом деле «сложность» файла проекта пугает только на первый взгляд. Сначала рекомендую ознакомиться с назначением таблиц в msi файле, для чего использовать msi SDK и Orca из него. Скачивается в составе Platform SDK.
      Следующий шаг, после того, как Вы поймёте взаимосвязи таблиц, свойств, действий (определяемых как записи в соответствующих таблицах), можно и нужно переходить к справке WiX, чтобы понять, как определить те или иные записи в тех или иных таблицах уже средствами WiX.
      Если msi файл рассматривать как некий исполняемый файл, тогда orca можно рассматривать в роли простейшего отладчика без функций online отладки, а wix — как ассемблер. Мастера же, которых Вы ждали — уже вещи более высокого уровня. Естественно, они могут Вас и ограничить, да и не бесплатные они, как правило.
      Честно говоря, для задач администратора вполне хватает WiX.
      Предлагаю следующую схему изучения: Вы описываете некую простейшую для первого раза задачу, которая перед Вами стоит сейчас, я попробую её решить средствами WiX с подробным описанием каждого шага.
      P.S. Собрать msi пакет из проекта у Вас получилось?

      • Спасибо за рекомендации. Буду читать.

        >Собрать msi пакет из проекта у Вас получилось?
        Не пробовал еще. Сначала почитаю документацию.

        • Для сборки достаточно нажать кнопку Build All в студии :-) И всё должно собраться (если wix скачан и на студию установлен).
          P.S. Изучасть проще на конкретном примере. Чтобы Вам было интереснее — лучше на Вашем примере. Посему если будет простенькая задачка — на ней и потренируемся, проще понять будет. «На сухую» понять назначение upgrade table, свойств всех, кучи компонентов и features — сложновато. Я пока разбирался с UpgradeTable, столько ошибоко наделал, что потом пришлось костыли вставлять в пакет для 1С 7.7 (там хорошо видно, что upgrage кодов появилось больше одного, в том числе — и с полным удалением обновляемого пакета).

          • Спасибо за желание помочь и пинки в нужном направлении. ;) Обязательно воспользуюсь вашей помощью и советами, т.к. обилие документации, которое предстоит перелопатить, внушает.

      • >Но любой мастер ограничит возможности своего посредника
        речь не совсем о мастере, но о RAD (Rapid Application Development), которая вполне могла бы снять с пользователя почетные обязанности по написанию части кода (открытию, закрытию тегов), контроля правильности кода и удобству заполнения значений полей. Что-то типа того окна, которое отображается в VS, при выборе свойств проекта WiX.

        • Понял. Студия (если wix установлен) понимает xml схему, и при написании атрибутов нодов будет предлагать их, возможные значения также. То есть чем-то уже поможет. Но можно использовать и сторонний xml редактор, который поддерживает xsd, подсунуть ему xsd из пакета WiX — и вот он, mini RAD. Делал и так с использованием редактора Altova XML (если название не переврал, на память пишу).
          Но intellisense от студии хватает.

    • И ещё: в составе WiX идёт несколько утилит командной строки (в частности — dark.exe), позволяющих либо генерировать файл проекта, либо его части. Их описание в справке WiX. Например, dark.exe позволяет Вам «распотрошить» (по сути — декомпилировать) уже готовый msi с целью дальнейшей переработки. Естественно, полученный файл придётся руками приводить в нечто читаемое (автоматические сгенерированные идентификаторы компонент и прочих элементов проекта читабельности не добавляют).
      Когда нужно собрать msi для очередного не msi дистрибутива, я обычно действую следующим образом: WinINSTALL LE снимаю msi после установки софта на подопытную виртуальную машину, потрошу полученный msi утилитой dark.exe от WiX, запускаю студию и начинаю переписывать полученный файл проекта в нечто разумное, добавляя необходимую логику, которую никакой winINSTALL LE никогда за человека не добавит (установка по требованию, автовосстановление и прочие прелести).

Опубликовать комментарий

XHTML: Вы можете использовать следующие HTML теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Tags Связь с комментариями статьи:
RSS комментарии
Обратная ссылка