Sas*_*sha 7 permissions iis-7 wix
我需要为创建的IIS应用程序池的logs文件夹设置权限.设置权限的代码:
<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>
Run Code Online (Sandbox Code Playgroud)
这适用于Windows Server 2003上的IIS 6,但Windows Server 2008上的IIS 7.5无效.我收到错误:
ExecSecureObjects: Error 0x80070534: failed to get sid for account: IIS AppPool\MyAppPool
Run Code Online (Sandbox Code Playgroud)
调查细节:
在 Server 2012 上进行测试,我确认帐户可用之前可能会有延迟。使用以下脚本,我在大约 30 次尝试中重现了 3 次查找失败的情况。看来我们需要在创建应用程序池和查找 SID 之间有一个延迟。在我的测试中,它从来没有超过 1 秒。
param ($id)
if (!$id) {write-host "specify an id"; return}
c:\windows\system32\inetsrv\appcmd add apppool /name:$id /managedRuntimeVersion:"v4.0" /managedPipelineMode:"Integrated"
$objUser = New-Object System.Security.Principal.NTAccount("IIS APPPOOL\$id")
$sid=""
while (!$sid)
{
$sid = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
if (!$sid) {write-host "$id not found"} else {$sid}
sleep 1
}
Run Code Online (Sandbox Code Playgroud)