簡體   English   中英

使用JNA在ProgramData子文件夾上設置寫許可權

[英]Set write permissions on ProgramData subfolder using JNA

我有一個用Java編寫的程序,該程序最初使用程序文件中的目錄編寫該程序的所有用戶均可訪問的文件。 這要求我們的用戶始終以管理員身份運行。 為了緩解這種情況,我們決定使用%ALLUSERSPROFILE%環境變量將在常規使用期間需要寫入的文件移動到ProgramData文件夾中。 如果在安裝過程中將其指定為可寫的,則在此目錄中為我們的應用程序使用子文件夾非常有用,使用NSIS可以正常工作。

問題在於升級現有用戶。 Java File API提供了setWritable但在開發機器上進行測試后似乎無法正常工作。 看起來帶有Java 7的新文件API可以解決此問題,但是由於沒有發布日期,我寧願不等待。

似乎最簡單的解決方案是使用JNA調用適當的Windows API調用以將該目錄設置為可寫。 由於升級軟件需要與安裝類似的管理員權限,因此應讓此更改順利進行。 但是,我不確定從哪里開始,以前從未使用過JNA或Windows API。 關於加載哪個Windows庫以及調用哪些函數的建議將不勝感激,特別是如果以前有人遇到過類似的問題。

我使用以下代碼:

Runtime.getRuntime().exec( "C:\\Windows\\System32\\icacls.exe \"%ProgramData%\my application" /grant *S-1-5-32-545:(OI)(CI)(W,M)" );

S-1-5-32-545是BUILTIN \\ Users的SID,因為該名稱僅在英語系統上有效。 https://support.microsoft.com/de-de/kb/163846

這使BUILTIN \\ Users可以對給定目錄中的所有文件進行寫訪問,而與創建它的用戶無關。

好吧,很高興為您提供一些背景知識...您可以使用JNA,但更簡單的方法是執行對命令行實用程序cacls的調用。 我相信Windows XP安裝中默認包含該工具,因此它可以為您解決問題。 嘗試運行Runtime.getRuntime().exec("C:\\\\Windows\\\\System32\\\\cacls.exe"+options)

在此處查看文檔-> http://technet.microsoft.com/zh-cn/library/bb490872.aspx

暫無
暫無

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

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