我正在更新我们的.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>
ASPNET_USER
和ASPNET_DOMAIN
分别定义为AppPoolName
和IIS APPPOOL
(其中AppPoolName
与应用池的名称完全匹配)。
当我运行安装程序时,收到1609错误,指出IIS APPOOL\AppPoolName
不是有效身份,安装失败。如何将“应用程序池标识”指定给“权限”元素,以便Web应用程序可以写入日志目录?我需要使用不同的身份吗?
答案 0 :(得分:7)
这是一个有趣的问题。
当您创建Permission元素时,它会生成LockPermissions MSI表的记录。根据MSDN,此表中的记录由InstallFiles,CreateFolders和WriteRegistryValues操作提供。当CreateFolder元素是父元素时,显然是CreateFolders操作。
创建相应的AppPool时会创建与ApplicationPoolIdentity对应的安全帐户。现在,ConfigureIIs操作将在序列中安排,而不是CreateFolders。在CreateFolders之前移动ConfigureIIs显然没有任何意义。
我不确定这会有效,但我会尝试以下方法:
将Permission元素替换为PermissionEx元素(来自WiXUtilExtension的元素)。它涵盖了权限的功能,并增加了更多的灵活性(例如,不覆盖ACL,但附加)。
在ConfigureIIs操作(负责IIS内容的人)之后移动SchedSecureObjects操作(负责处理PermissionEx的东西),如果它已经存在的话。
现在,在设置权限时,应该存在相应的安全帐户。您可能还想要使用引用它的方式,例如,有或没有域部分。