Как выполнить поиск и замену файла XML после установки WIX? - PullRequest
0 голосов
/ 28 марта 2011

После установки моих файлов с помощью WIX 3.5 я хотел бы изменить некоторые значения в одном из моих XML-файлов.

В настоящее время существует несколько таких записей:

<endpoint address="net.tcp://localhost/XYZ" .../>

Я хотел бы изменить локальный хост на реальное имя сервера, которое доступно из-за свойства. Как я могу выполнить эту замену для каждой записи внутри этого XML-файла? Есть ли способ сделать это без написания собственного CA?

Заранее спасибо!

Ответы [ 4 ]

4 голосов
/ 28 марта 2011

XmlConfig и / или XmlFile элементы ваши друзья здесь.

ОБНОВЛЕНИЕ : Ну, согласно комментариям ниже, получаетсячто только часть значения атрибута (или элемента) должна быть изменена.Похоже, что это не поддерживается ни одним из двух упомянутых элементов.

Тогда я бы воспользовался одним из двух подходов:

  • Использовать сторонние действия для чтения XML, например этот

Это лучше, чем создавать свое собственное, потому что в этом случае вы можете положиться на более глубокое тестирование

  • Научите свой скрипт сборки управлять шаблоном строки

Допустим, вы положили `net.tcp: // localhost / XYZ` для сборки файла, и ваш код указывается, чтобы принять это значение в качестве строкового шаблона для использования во время установки.Например, сохраните строковый шаблон как свойство в вашем пакете MSI.Когда он меняется, например, на `net.tcp: // localhost / ABC`, вам ничего не придется менять в ваших действиях.В этом случае с точки зрения XMLFile вы всегда знаете значения атрибутов FROM и TO.

0 голосов
/ 28 марта 2011

Если ваш XML-файл конфигурации невелик, вы можете загрузить его в память и выполнить замену с помощью JScript.

var s = "<endpoint address=\"net.tcp://localhost/XYZ\" .../>";

var re = /"net.tcp:\/\/localhost\//g;
var r = s.replace(re, "\"http://newhost.com/");

Здесь s - ваш полный XML-файл, re - регулярное выражение, а r будет содержать результат или замену.

Вы можете читать и писать в общедоступные свойства установщика Windows, используя JScript. И все же есть еще одна проблема: вы должны прочитать свой XML-файл и записать его обратно на диск. Для этого вы можете использовать Win32_ReadFile и Win32_WriteFile пользовательские действия из AppSecInc. MSI Extensions библиотека, на которую Ян ссылается в его ответе .


Однако может быть проще написать полное пользовательское действие, которое загрузит ваш XML-файл конфигурации, выполнит замену и запишет файл обратно на диск. Для этого вы можете использовать XSLT и JScript (см. пример кода ).

0 голосов
/ 28 марта 2011

В Wix ничего нет, вы можете что-то изменить в файле, не используя настраиваемое действие. Если вы не хотите использовать CA, вы можете сохранить настройки в другом месте, например. Пользовательский реестр и всегда читайте эту настройку оттуда

0 голосов
/ 28 марта 2011

InstallShield имеет встроенное настраиваемое действие, управляемое данными, которое называется Текстовый поиск. Это в основном позволяет заменять стиль RegEx, как то, что вы описываете.

WiX не имеет этой функции, но вы можете написать собственное действие (скажем, с помощью C # / DTF), чтобы сделать это за вас.

...