程式碼動態設定資料夾 ACL:授予 ASPNET 完整控制權限
完整代碼
using System;
using System.IO;
using System.Net;
using System.Security.AccessControl;
using System.Security.Principal;
using System.Web.UI;
public partial class ACLChange : Page
{
private string strDir = "images";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) AddDirectorySecurity();
}
private void AddDirectorySecurity()
{
DirectoryInfo dirInfo = new DirectoryInfo(Server.MapPath(strDir));
// 移除唯讀屬性
if ((dirInfo.Attributes & FileAttributes.ReadOnly) != 0)
dirInfo.Attributes = FileAttributes.Normal;
DirectorySecurity dirSecurity = dirInfo.GetAccessControl();
string domain = Dns.GetHostName(); // 本機網域/電腦名
dirSecurity.AddAccessRule(new FileSystemAccessRule(
domain + @"\ASPNET",
FileSystemRights.FullControl,
AccessControlType.Allow));
dirInfo.SetAccessControl(dirSecurity);
}
}
關鍵步驟解析
Server.MapPath 取得實體路徑。
- 清除
ReadOnly 屬性,否則 ACL 修改可能失效。
GetAccessControl 取得現有 ACL。
- 建立
FileSystemAccessRule:身分 機器名\ASPNET、權限 FullControl、類型 Allow。
SetAccessControl 寫回檔案系統。
適用場景
- 部署腳本自動化設定上傳目錄權限。
- 共享主機環境無法手動設定 IIS 權限時。
注意: IIS 7+ 應用程式池身分預設為 IIS_IUSRS 或 ApplicationPoolIdentity,非 ASPNET,需依實際身分調整。