hash1.merge(hash2){|_, v1, v2| [v1, v2]}.values
# => [["]", "["], ["}", "{"], [")", "("], ["(", ")"], ["{", "}"], ["[", "]"]]
Расширения IIS для WIX не поддерживают IIS7. Команды IIS продолжают переписывать метабазу между версиями. Существует довольно много вещей, которые не работают, отсутствие пула интегрированного приложения среди них.
Пока расширения не переписываются, Вас оставляют с тремя опциями:
Я выбрал xmlconfig опцию в данный момент, поскольку можно сделать это в компоненте и связать его с функцией.
Благодаря @matthewthurlow я смог использовать XML utils для достижения того, что я должен был сделать:
<util:XmlFile
Id="ModifyAppPoolPipelineType"
Action="setValue"
ElementPath="//configuration/system.applicationHost/applicationPools/add[\[]@name='My Application Pool'[\]]/@managedPipelineMode"
File="[WindowsFolder]System32\inetsrv\config\applicationHost.config"
Value="Integrated"/>
Остальная часть действий, действительно кажется, хорошо работает с IIS 7.
Я лично рекомендую использовать AppCmd.exe (первая статья Matthewthurlow), потому что вам не нужно рассчитывать на устанавливаемые устаревшие компоненты управления или рискнуть изменить конфигурационный XML вручную.
Если вам не нравится AppCmd, у Майка Володарского есть отличная статья на тему: Начало работы с AppCmd. exe и справочник по конфигурации IIS Microsoft превосходны, предлагая примеры пользовательского интерфейса, кода и AppCmd для изменения каждого из элементов конфигурации (например, пулов приложений ). Пакет администрирования IIS7 также включает в себя Редактор конфигурации, который позволяет создавать сценарии AppCmd из любой существующей конфигурации.
Чтобы интегрировать AppCmd в WiX, необходимо создать и запланировать два пользовательских действия для каждой команды. В руководстве по WiX v3 содержится общая информация, описывающая эту процедуру , и ниже приведен конкретный пример.
Во-первых, вам нужно настроить немедленное действие для сохранения командной строки в свойстве :
<CustomAction
Id="CreateAppPool_Cmd"
Property="CreateAppPool"
Execute="immediate"
Value=""[WindowsFolder]system32\inetsrv\APPCMD.EXE" add apppool /name:"[APP_POOL_NAME]"" />
Далее вы устанавливаете отложенное действие, которое ссылается на это свойство:
<CustomAction
Id="CreateAppPool"
BinaryKey="WixCA"
DllEntry="CAQuietExec"
Execute="deferred"
Return="ignore"
Impersonate="no"/>
И, наконец, вам нужно запланировать это. Непосредственное действие, которое устанавливает свойства, похоже, хорошо работает после InstallFinalize, а отложенное действие работает после InstallFiles. Я еще не дошел до выяснения действий по откату.
MapGuide Open Source широко использует этот метод; Вы можете увидеть расписание CA в нашем файле MapGuide.wxs , а определение CA в нашем файле IIS7.wxs .