我有一個前端應用(在PowerBuilder但是這並不重要)。UAC和文件虛擬化創建了調用用Java開發與launch4j包裝輔助應用程序文件
應用程序的最終用戶自由地配置路徑進入其中一些文件將通過任一前端或後端中生成的前端的可能性。
我注意到,在UAC激活的Windows Vista或Windows7上,如果用戶(沒有管理員權限)將輸出配置爲C:\
,則會將生成的文件虛擬爲c:\Users\user_name\AppData\Local\VirtualStore\
目錄。
但是,當進程使得java應用程序在同一個C:\
中創建一些文件(通過FileOutputStream
)時,java會因「驅動器根目錄無法訪問用戶,而不是其他應用程序被虛擬化的事實。任務管理器確認其中一個虛擬化而不是另一個。
我發現that other SO question提供了一些線索,但沒有回答我的情況,因爲這兩個應用程序都是在32位系統上的32位,並且兩個都沒有涉及清單。
有沒有辦法讓Java的行爲類似於PB應用程序(即進行虛擬化 - 這一個客戶要求)?當然,更好的解決方案是檢查路徑是否可訪問,如果不是,則通知用戶。
編輯: 注視java.exe的二進制文件,我注意到,它包括一個清單,各國(但我不熟悉)
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="asInvoker"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
也許是的答案問題:java沒有通過設計虛擬化? 編輯:我也明白,清單機制禁用虛擬化。
EPILOGUE:感謝您的解釋和您的論點有助於改變客戶的要求。現在人們認識到,處理缺乏權限對某些文件夾寫的是不是讓Windows虛擬化在醚某處的文件更好:O)
這是什麼決定。通過通過內部清單禁用虛擬化,我們有一個正反兩端的一致行爲。 – Seki
嗚,常識勝:) – Deanna