如何在WiX权限元素中指定应用程序池标识?

时间:2011-08-30 09:39:41

标签: iis wix windows-installer 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>

ASPNET_USERASPNET_DOMAIN分别定义为AppPoolNameIIS APPPOOL(其中AppPoolName与应用池的名称完全匹配)。

当我运行安装程序时,收到1609错误,指出IIS APPOOL\AppPoolName不是有效身份,安装失败。如何将“应用程序池标识”指定给“权限”元素,以便Web应用程序可以写入日志目录?我需要使用不同的身份吗?

1 个答案:

答案 0 :(得分:7)

这是一个有趣的问题。

当您创建Permission元素时,它会生成LockPermissions MSI表的记录。根据MSDN,此表中的记录由InstallFilesCreateFoldersWriteRegistryValues操作提供。当CreateFolder元素是父元素时,显然是CreateFolders操作。

创建相应的AppPool时会创建与ApplicationPoolIdentity对应的安全帐户。现在,ConfigureIIs操作将在序列中安排,而不是CreateFolders。在CreateFolders之前移动ConfigureIIs显然没有任何意义。

我不确定这会有效,但我会尝试以下方法:

  • 将Permission元素替换为PermissionEx元素(来自WiXUtilExtension的元素)。它涵盖了权限的功能,并增加了更多的灵活性(例如,不覆盖ACL,但附加)。

  • 在ConfigureIIs操作(负责IIS内容的人)之后移动SchedSecureObjects操作(负责处理PermissionEx的东西),如果它已经存在的话。

现在,在设置权限时,应该存在相应的安全帐户。您可能还想要使用引用它的方式,例如,有或没有域部分。