Установщик Wix - Сохранение пользователя пула приложений при обновлении - PullRequest
0 голосов
/ 27 мая 2020

У меня есть установщик WIX, который создает пул приложений следующим образом, используя ApplicationPoolIdentity в качестве идентификатора по умолчанию.

<Component Id="MyConsoleAppPool" Guid="{my_guid_here}" KeyPath="yes" NeverOverwrite="yes" Win64="yes">
<iis:WebAppPool Id="MyAppPool"
                Name="My Web Console" 
                ManagedPipelineMode="Integrated"
                ManagedRuntimeVersion="v4.0" />
</Component>

Некоторые из наших клиентов предпочитают изменить пользователя пула приложений на другого (настраиваемого) пользователя IIS после установки.

При обновлении пользователь пула приложений сбрасывается до значения по умолчанию ApplicationPoolIdentity. Это вызывает у них головную боль при каждом обновлении.

Есть ли способ сохранить существующего пользователя пула приложений, , в идеале, не требуя повторного ввода пароля пользователя ? Мы бы хотели, чтобы это происходило незаметно во время обновлений.

Примечание. У нас есть вспомогательная библиотека в C#, которую можно вызывать через CustomAction, если там требуется какой-либо поддерживающий код.

1 Ответ

0 голосов
/ 29 мая 2020

Причина, по которой пул приложений сбрасывался, заключается в том, что, поскольку это был компонент, созданный внутри установщика, он будет полностью удален и повторно установлен при обновлении.

Вместо того, чтобы создавать пул приложений в элемент «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:&quot;My Web Console&quot; /managedRuntimeVersion:&quot;v4.0&quot; /managedPipelineMode:&quot;Integrated"
                  Execute="deferred"
                  Return="ignore"
                  Impersonate="no" />

<CustomAction Id="DeleteIISAppPool"
                  Directory="TARGETDIR"
                  ExeCommand="[SystemFolder]inetsrv\appcmd delete apppool &quot;My Web Console&quot;"
                  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.

...