簡體   English   中英

你如何在 NSIS 中設置目錄權限?

[英]How do you set directory permissions in NSIS?

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

我承認這聽起來有點像壞主意,但該應用程序只是一個內部應用程序,只有少數人在專用網絡上使用。 我只需要保存日志文件,這樣我就可以看到如果發生不好的事情,應用程序為什么會損壞。 用戶不能成為管理員。

使用AccessControl插件,然后將其添加到腳本中,其中“logs”目錄位於安裝目錄中。

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

這為所有用戶提供了對該文件夾的完全訪問權限。

AccessControl::GrantOnFile "<folder>" "(BU)" "FullAccess"在 Windows Server 2008 機器上對我不起作用。 相反,我不得不使用這個:

AccessControl::GrantOnFile "<folder>" "(S-1-5-32-545)" "FullAccess"

根據Microsoft 支持:Windows 操作系統中的眾所周知的安全標識符, S-1-5-32-545 相當於“用戶”。

與其更改 Program Files 下目錄的權限,不如將日志放在所有用戶都可以寫入的位置。

請參閱 NSIS 文檔中的 4.9.7.7 SetShellVarContext 部分。 您可以將它與 $APPDATA 一起使用來獲取對所有用戶都可寫的應用程序數據文件夾。

現在這是一個老問題,但正如 Sören APPDATA 目錄所建議的那樣,這是一個很好的方式來做你想做的事,事情是:不要拿用戶的個人 APPDATA 而是“所有用戶”APPDATA 目錄! 這樣任何人都可以訪問日志文件;-)

另外,我在某處讀到在 GrantOnFile 上使用 (BU) 在某些系統上不能正常工作(如果我沒記錯的話,Win 7 x64),也許您應該使用 SID“(S-1-5-32-545)”代替(它是所有用戶的 SID,這個值在每個 Windows 操作系統上都是一個常數)

一種方法:調用外殼,並使用caclsxcacls

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM