2

我正在以编程方式克隆一个 git repo,编译源代码并在 R2 2008 Windows 服务器上的 IIS 中创建一个新站点。

配置站点后,我需要为新的 IIS AppPool Identity 帐户设置权限;我正在尝试使用FileSystemAccessRule

// Set the Permissions
var dSiteRoot = new DirectoryInfo(cSiteRoot);

var oACL = dSiteRoot.GetAccessControl();
var cUser = "IIS APPPOOL\\" + cAppPoolName;

oACL.AddAccessRule(
    new FileSystemAccessRule(
        cUser, 
        FileSystemRights.FullControl, 
        InheritanceFlags.ObjectInherit, 
        PropagationFlags.InheritOnly, 
        AccessControlType.Allow
    )
);

dSiteRoot.SetAccessControl(
    oACL
);

FileSystemAccessRule使用以下消息创建新实例时会引发异常:

部分或全部身份参考无法翻译。

我想知道用户是否尚未创建;刚刚通过 . 创建并提交了 AppPool 和站点ServerManager因此,我尝试引用另一个现有且活动的 IIS AppPool 用户。那也失败了。 编辑我一定没有正确测试过这个 - 请参阅下面的答案

我确实想知道是否需要在字符串前面加上机器名称。我试图从 中添加 MachineName,System.Environment.MachineName但这也失败了,并出现了同样的错误。

如何使用 C# 引用 IIS AppPool 用户来设置文件夹的权限?

4

1 回答 1

1

上面的 C# 是正确的,我错了,这取决于时间。

我添加了一个循环来尝试设置权限,AddAccessRule如果它失败了,我将线程设置为休眠 50 毫秒,然后再试一次,依此类推,直到达到超时或成功;在所有情况下,它都成功了 5 次尝试。

于 2013-07-30T15:27:32.827 回答