2010-06-08 145 views
2

在我的WinForms應用程序NSIS安裝腳本,我用下面的CACLS命令授予Users組完全權限到子文件夾:CACLS混亂

Exec 'CACLS "$INSTDIR\SubFolder" /E /T /C /G "Users":F' 

所以在效果cacls命令執行的是一樣的東西:

CACLS "c:\Program Files\MyApp\SubFolder" /E /T /C /G "Users":F 

當我再看看在Windows資源管理器的文件夾權限(右鍵單擊該文件夾並選擇屬性,進入安全選項卡),正確的權限是有,但它們是不可編輯。

此外,單擊「高級安全設置」的高級按鈕會顯示子文件夾從「父對象」繼承「用戶」組權限,但是該父對象是什麼,因爲它不是上述文件夾。

爲什麼CACLS添加的權限不可編輯,爲什麼它們從不存在的父對象繼承?我想我可能在CACLS上設置了錯誤的選項。

我在Windows XP上。

回答

3

我想我想通了:更改CACLS使用/ P'取代'而不是/ G 'grant'似乎效果更好:

CACLS "c:\Program Files\MyApp\SubFolder" /E /T /C /P "Users":F 

創建的選項可在Windows資源管理器的「安全」選項卡中編輯。

2

NSIS有plugin設置權限,你應該使用(我不記得,如果XP家庭甚至有cacls

爲「用戶」所繼承的權限有來自某處顯然,無論是驅動器的根目錄或父文件夾的父級(高級安全性對話框應該有從列中繼承的列)

+0

我看着所有的父文件夾,權限似乎並沒有從那裏來。儘管如此,感謝插件建議。 – codeulike 2010-06-09 09:25:07

+0

AccessControl插件的+1。它爲我工作得很好,我會推薦它,因爲它使用Windows API,而不是依賴於目標機器上的實用程序(如cacls)的存在。 – 2010-06-09 13:59:31