Причина, по которой пул приложений сбрасывался, заключается в том, что, поскольку это был компонент, созданный внутри установщика, он будет полностью удален и повторно установлен при обновлении.
Вместо того, чтобы создавать пул приложений в элемент «iis: WebAppPool», я решил просто сослаться на пул приложений следующим образом: вне любого компонента WIX :
<Fragment>
<iis:WebAppPool Id="MyAppPool" Name="My Web Console"/>
</Fragment>
Затем я создал следующие настраиваемые действия для обработки создание / удаление пула приложений:
<CustomAction Id="CreateIISAppPool"
Directory="TARGETDIR"
ExeCommand="[SystemFolder]inetsrv\appcmd add apppool /name:"My Web Console" /managedRuntimeVersion:"v4.0" /managedPipelineMode:"Integrated"
Execute="deferred"
Return="ignore"
Impersonate="no" />
<CustomAction Id="DeleteIISAppPool"
Directory="TARGETDIR"
ExeCommand="[SystemFolder]inetsrv\appcmd delete apppool "My Web Console""
Execute="deferred"
Return="ignore"
Impersonate="no" />
И последовательность, в которой говорится, что пул приложений не затрагивается ни в одном сценарии обновления ios:
<InstallExecuteSequence>
<Custom Action="DeleteIISAppPool" Before="CreateIISAppPool">(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")</Custom>
<Custom Action="CreateIISAppPool" Before="InstallFiles">(NOT UPGRADINGPRODUCTCODE) AND (NOT Installed) AND (NOT REMOVE="ALL")</Custom>
<!-- continue with rest of custom actions here -->
</InstallExecuteSequence>
Примечание. не учитывать пользователя, удаляющего свой пул приложений вручную (по ошибке или иным образом). Им потребуется удалить текущую версию и переустановить, чтобы воссоздать пул приложений. Эту проблему можно решить, добавив другое настраиваемое действие для поиска пула приложений, и, если оно не найдет его, установите его при обновлении с условием UPGRADINGPRODUCTCODE.