ala*_*irs 3 iis windows-installer wix iis-7.5 wix3.5
我正在更新我们的.NET 4.0和IIS 7.5安装程序之一,其中一项任务是将AppPool切换为使用自己的标识.我在使用IIS扩展的WiX中发现这相当微不足道,但是我正在努力处理我们定义的两组额外权限,特别是授予AppPool标识的写权限:
<Directory Id="LOGS_LOCATION" Name="logs">
<!-- SourceDir\logs -->
<Component Id="LogsFolder" Guid="{3A7C38C7-6604-4063-A425-D62427B21AEE}" KeyPath="yes" DiskId="1">
<CreateFolder>
<!-- SYSTEM account is automatically given access, but set other ACEs here to avoid Users having access -->
<Permission User="Administrators" GenericAll="yes"/>
<Permission User="[ASPNET_USER]" Domain="[ASPNET_DOMAIN]" GenericRead="yes" GenericWrite="yes" Read="yes" Delete="yes" DeleteChild="yes" Traverse="yes"/>
<!-- IIS5: ASPNET, IIS6: NetworkService, IIS7: AppPool identity -->
</CreateFolder>
</Component>
</Directory>
Run Code Online (Sandbox Code Playgroud)
ASPNET_USER并且ASPNET_DOMAIN被定义为AppPoolName和IIS APPPOOL(分别AppPoolName与应用程序池的名称完全匹配).
当我运行安装程序时,我收到1609错误,指出它IIS APPOOL\AppPoolName不是有效身份,安装失败.如何将"应用程序池标识"指定给"权限"元素,以便Web应用程序可以写入日志目录?我需要使用不同的身份吗?
这是一个有趣的问题.
当您创建Permission元素时,它会生成LockPermissions MSI表的记录.根据MSDN,此表中的记录由InstallFiles,CreateFolders和WriteRegistryValues操作提供.当CreateFolder元素是父元素时,它显然是CreateFolders操作.
创建相应的AppPool时,将创建与ApplicationPoolIdentity对应的安全帐户.现在,ConfigureIIs操作将在序列中安排,而不是CreateFolders.在CreateFolders之前移动ConfigureIIs显然没有任何意义.
我不确定这会有效,但我会尝试以下方法:
使用PermissionEx元素(来自WiXUtilExtension的元素)替换Permission元素.它涵盖了Permission的功能,并增加了更多的灵活性(例如,不覆盖ACL,但附加).
在ConfigureIIs操作(负责IIS的东西)之后移动SchedSecureObjects操作(负责处理PermissionEx的东西),如果它还没有.
现在,在设置权限时,应该存在相应的安全帐户.您可能还想要使用引用它的方式,例如,有或没有域部分.