2010-03-19 1 views
7

Наша команда недавно подумывала о том, чтобы отменить небольшое исправление реестра для пользователей, чтобы изменить один конкретный проблемный ключ. Довольно простой материал, просто необходимо обновить 1 ключ/значение в реестре.Создание патча MSI (.msp) вручную?

Итак, на данный момент мы используем Wix для сборки установщиков MSI для продукта. При поиске в поддержку Wix для создания MSP-файлы исправлений, кажется, что единственный способ создания .MSP является несколько усложненной многоступенчатый процесс на:

  1. Получить копию оригинального MSI и скомпилировать новая копия фиксированной MSI
  2. Написать новый Wix файл, который указывает на обоих монтажников
  3. компиляции файла Wix в .wixobj с Свеча на .psp
  4. Run факел/Pyro над до/после моментальных снимков оригинальные установщики и .psp, или, альтернативно, с использованием MsiMsp.exe

Теперь мой вопрос: не могу ли я просто описать изменение реестра в файле Wix и напрямую скомпилировать его в .msp без шага 1 и 4, что является огромным усилием только для простого изменения?

ответ

7

№ Патч - это дельта двух устанавливаемых изображений. Чтобы генерировать дельта, даже если разница очень мала, вам понадобятся оба изображения.

+1

Объяснение правильное. Вы просто описываете ручной метод создания двух изображений. –

2

Возможно создание MSP (исправлений) и MST (преобразование) с использованием Orca и других инструментов из SDK установки Windows (который теперь является частью Windows SDK). Однако процесс может быть не намного проще, чем тот, который у вас уже есть с WiX.

Here - лучшее объяснение, которое я могу найти в течение нескольких минут после Googling; Я все еще подозреваю, что там должно быть что-то лучше. Но если вы знакомы с форматом установщика Windows, довольно легко изучить и попробовать несколько вещей с Orca, пока вы не повесите его.

3

Да, есть еще один способ, даже если вы можете рассматривать его в равной степени сложно:

  1. Создание администратора установки вашей «базовой версии» с помощью msiexec /qn /a <msi-file> TARGETDIR=<absolute-path-of-existing-directory> (если вы запустите это из косметическим файла или другого сценария используйте start /wait перед командой), скажем, в %BASEDIR%
  2. повторите описанные выше, но в %UPDDIR%
  3. Теперь, когда у вас есть установка распаковали внутри %UPDDIR%, внесите изменения в .msi файл, который будет находиться в корневом каталоге этой папки ... вы также должны изменить номер версии ...
    • Если вы обмениваетесь файлами, не забудьте обновить хеш-таблицу (MsiFileHash) или таблицу File для файлов с информацией о версии.
    • Если вы меняете только какое-то значение реестра, вы должны быть в порядке, без этого ...
  4. Теперь подготовьте файл с .pcp (Patch Свойства создания), чтобы указать на одну строку в TargetImages таблице на .msi в %BASEDIR% и один ряд в UpgradedImages к .msi в %UPDIR%
  5. Invoke msimsp.exe <pcp-file> -p <absolute-path-to-desired-patch-file>

Войла, все готово.

Теперь, независимо от того, стоит ли это, это зависит исключительно от вас.

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

Хитрость здесь заключается в исправлении распакованного изображения администратора и прямой msimsp.exe, чтобы создать патч между неизменной и измененной версией распакованного изображения администратора. В целом это соответствует вашему требованию делать это «вручную».

Напишите комментарий, если что-то нуждается в разъяснении.

 Смежные вопросы

  • Нет связанных вопросов^_^