2008-09-22 235 views
31

我正在嘗試使用需要由管理員安裝的Nullsoft安裝系統來構建Windows安裝程序。安裝程序創建一個「日誌」目錄。由於普通用戶可以運行該應用程序,因此該目錄需要由普通用戶寫入。如何指定所有用戶都有權限以NSIS腳本語言對該目錄進行寫入訪問?如何在NSIS中設置目錄權限?

我承認這聽起來像是一個壞主意,但應用程序只是一個內部應用程序,只有少數人在私人網絡上使用。我只需要保存日誌文件,這樣我就可以看到爲什麼應用程序在發生問題時會中斷。用戶不能成爲管理員。

回答

33

使用AccessControl插件,然後將其添加到腳本中,其中「logs」目錄位於安裝目錄中。

AccessControl::GrantOnFile "$INSTDIR\logs" "(BU)" "FullAccess" 

這給所有用戶的文件夾的完全訪問權限。

3

單程:調用shell,並使用caclsxcacls

+2

+1 ..沒人理解這個,因此沒有悲傷地上傳影片.. – nawfal 2012-07-26 10:00:14

2

爲什麼不在用戶的%APPDATA%目錄中創建一個日誌目錄?你真的需要把所有的日誌放在安裝目錄中嗎?爲什麼?

+0

我希望其他用戶也能夠查看日誌。如果它們在用戶APPDATA目錄中,那麼如果用戶1運行該應用程序,則只有用戶1或管理員可以看到該日誌文件。 – 2008-09-22 19:48:40

9

而不是更改程序文件下目錄的權限,爲什麼不把日誌放在所有用戶都可寫入的位置。

請參見NSIS文檔中的4.9.7.7 SetShellVarContext部分。您可以使用$ APPDATA來獲取可寫入所有用戶的應用程序數據文件夾。

+1

看看如何在log4net中完成這個問題的答案:http://stackoverflow.com/questions/468989/how-to-specify-common-application-data-folder-for-log4net/1889591#1889591 – 2011-03-30 16:00:06

6

這是一個老問題,但現在由索倫APPDATA的建議目錄是一個很好的方式來做你想做的事情,事情是: 不要把用戶的個人APPDATA,而是「所有用戶」APPDATA目錄! 這樣任何人都可以訪問日誌文件;-)

此外,我讀了一些地方,使用(BU)GrantOnFile不能很好地與一些系統(如果我記得很好,贏了7 x64),也許你應該使用SID「(S-1-5-32-545)」代替(這是所有用戶的SID,這個值在每個Windows操作系統上都是一個常量)