我寫了一個Java應用程序,並將它與NSIS(或NSYS ...)安裝程序打包在一起。我工作乾淨,但有時我發現,對於在Windows 7上運行的某些用戶,應用程序將無法寫入磁盤(甚至無法寫入日誌)。該應用程序安裝在c:\ Programs(或d或e ...)上。來自支持人員表示他們通過安裝在c:\中來解決它。爲什麼會發生?它與Java安全性有關嗎?也許在我的Windows安裝和其他我沒有注意到它,因爲我已關閉無人機。Java應用程序無法在Windows 7上的磁盤上寫入,爲什麼?
想法?
我寫了一個Java應用程序,並將它與NSIS(或NSYS ...)安裝程序打包在一起。我工作乾淨,但有時我發現,對於在Windows 7上運行的某些用戶,應用程序將無法寫入磁盤(甚至無法寫入日誌)。該應用程序安裝在c:\ Programs(或d或e ...)上。來自支持人員表示他們通過安裝在c:\中來解決它。爲什麼會發生?它與Java安全性有關嗎?也許在我的Windows安裝和其他我沒有注意到它,因爲我已關閉無人機。Java應用程序無法在Windows 7上的磁盤上寫入,爲什麼?
想法?
當你想知道是否因爲你關閉了UAC時,你已經擊中了頭部。
您不應該將日誌文件寫入應用程序安裝位置,而是需要選擇應用程序可寫入的位置,例如, user.home系統屬性下的目錄。
java應用程序無法執行此操作和其他應用程序的原因與Data Redirection有關,這會導致寫入某些文件夾時被透明地重定向到每個用戶的數據存儲。我認爲這個重定向對JRE是禁用的(使用進程管理器進行檢查,沒有'虛擬化'的標記),這意味着在java程序中透明重定向不會發生。
如果您希望您的應用程序能夠寫入應用程序的安裝目錄,那麼完成此操作的最簡單方法是change the permissions of the folder on installation。
該應用程序顯然沒有對嘗試寫入文件的位置的寫入權限。如果它試圖寫入Program Files目錄,這是預期的(應用程序通常不以管理員權限運行)。而應寫入保證可由應用程序/當前用戶寫入的地方。例如,獲取將指向用戶的主目錄的Java屬性user.home
,並將文件寫入適當的子目錄中。
我做了一些研究,發現在另一個論壇上Program Files是Windows 7 Home Premium的受保護目錄,因爲Windows安全性,您必須安裝c:\。只是FYI
我想在Tomcat上的代碼,發現我無法將文件保存到程序文件。我必須安裝c:\ Tomcat才能保存我的任何文件。
您是否收到任何錯誤消息? – Thilo
讓我猜...寫訪問權限? –
*「我有無人機關閉。」* [無人機](http://en.wikipedia.org/wiki/Unmanned_aerial_vehicle)?沒有遙遠的飛行!什麼是NSYS? –