我需要为创建的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" 域 - 结果相同。
- 还尝试了将 PermissionEx 元素的 Domain 和 User 属性设置而不是合并到 User 属性中。仍然出现相同的错误。
- 在 PermissionEx 中使用活动目录帐户没有问题。同时,在设置时使用活动目录帐户与 IIS 网站池一起使用也没有问题。
- 如果我尝试为另一个 AppPool(而不是由我的安装程序创建的),例如 IIS AppPool\DefaultAppPool 设置权限,一切都很顺利。只有在设置由我的安装程序创建的 AppPool 的权限时才会出现问题。
- 我检查了 ConfigureIIs、SchedSecureObjects 和 ExecSecureObjects 的排序,并尝试强制让 ConfigureIIs 在另外两个之前执行(在这个主题中建议)。不幸的是,这也没有帮助。