如何在WiX权限元素中指定AppPool标识?

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被定义为AppPoolNameIIS APPPOOL(分别AppPoolName与应用程序池的名称完全匹配).

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

Yan*_*nko 7

这是一个有趣的问题.

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

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

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

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

  • 在ConfigureIIs操作(负责IIS的东西)之后移动SchedSecureObjects操作(负责处理PermissionEx的东西),如果它还没有.

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

  • 它必须是拼写错误 - 它是ConfigureIIs,最后一个'不是资本. (2认同)