作成した IIS アプリケーション プールのログ フォルダーにアクセス許可を設定する必要があります。アクセス許可を設定するコード:
<CreateFolder Directory="SiteLogsFolder">
<util:PermissionEx User="Everyone" Read="yes" GenericRead="yes"/>
<util:PermissionEx User="[IisSiteUser]" GenericRead="yes" GenericWrite="yes" GenericExecute="yes" Delete="yes" DeleteChild="yes"/>
</CreateFolder>
<CustomAction Id="SetIis6SiteUser" Property="IisSiteUser" Value="NT AUTHORITY\NetworkService"/>
<CustomAction Id="SetIis7SiteUser" Property="IisSiteUser" Value="IIS AppPool\[SITE_APP_POOL]"/>
<InstallExecuteSequence>
<Custom Action="SetIis7SiteUser" Before="InstallInitialize">IISMAJORVERSION>="#7"</Custom>
<Custom Action="SetIis6SiteUser" Before="InstallInitialize">IISMAJORVERSION="#6"</Custom>
</InstallExecuteSequence>
これは、Windows Server 2003 上の IIS 6 では正常に機能しますが、Windows Server 2008 上の IIS 7.5 では失敗します。次のエラーが表示されます。
ExecSecureObjects: Error 0x80070534: failed to get sid for account: IIS AppPool\MyAppPool
調査の詳細:
- 「IIS APPPOOL」ドメインも試しましたが、結果は同じでした。
- また、User 属性にマージする代わりに、PermissionEx 要素の Domain プロパティと User プロパティの両方を設定しようとしました。再び同じエラー。
- PermissionEx での Active Directory アカウントの使用は正常に機能します。また、Active Directory アカウントが設定されている場合、IIS サイト プールで正常に動作します。
- 別の AppPool のアクセス許可を設定しようとすると (IIS AppPool\DefaultAppPool など、インストーラーによる作成ではなく)、すべて正常に動作します。この問題は、インストーラーによって作成された AppPool のアクセス許可を設定した場合にのみ発生します。
- ConfigureIIs、SchedSecureObjects、および ExecSecureObjects のシーケンスを確認し、ConfigureIIs を他の 2 つよりも先に強制的に実行しようとしました (このスレッドで推奨されていました)。残念ながら、それも役に立ちませんでした。