簡體   English   中英

Windows 7上的Java App無法在磁盤上寫,為什么?

[英]Java App can't write on disk on Windows 7, why?

我編寫了一個Java應用程序,並將其與NSIS(或NSYS ...)安裝程序打包在一起。 我工作得很干凈,但有時我發現對於在Windows 7上運行的某些用戶,該應用程序將根本無法在磁盤上寫(甚至無法寫日志)。 該應用程序安裝在c:\\ Programs(或d或e ...)上。 支持人員說,他們通過安裝在c:\\中來解決該問題。 為什么會這樣? 它與Java安全性有關嗎? 也許在Windows安裝和其他安裝上,我沒有注意到它,因為我已經關閉了無人機。

想法?

當您懷疑是否是因為關閉了UAC時,您已經碰到了頭。

您不應該將日志文件寫入應用程序安裝到的位置,而是需要選擇應用程序可寫的位置,例如user.home系統屬性下方的目錄。

Java應用程序不能執行此操作而其他應用程序可以執行此操作的原因與“ 數據重定向”有關 ,后者導致對某些文件夾的寫入被透明地重定向到每個用戶的數據存儲。 我認為JRE禁用了此重定向(使用流程瀏覽器檢查,它沒有標記為“ Virtualized”),這意味着在Java程序上不會發生透明重定向。

如果希望您的應用程序能夠寫入應用程序的安裝目錄,那么最簡單的方法是更改安裝文件夾的權限

我進行了一些研究,然后在另一個論壇中發現Program Files是Windows 7 Home Premium的受保護目錄,由於Windows安全性,您必須安裝c:\\。 僅供參考

我試圖在Tomcat上進行編碼,發現無法將文件保存到程序文件中。 我必須安裝c:\\ Tomcat才能保存我的任何文件。

該應用程序顯然對嘗試寫入文件的位置沒有寫訪問權。 如果它試圖寫入Program Files目錄,那是可以預期的(應用程序通常不以管理員權限運行)。 而是寫入一個保證應用程序/當前用戶可寫的位置。 例如,獲取Java屬性user.home ,它將指向用戶的主目錄,並將文件寫入相應的子目錄中。

暫無
暫無

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

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