我正在为现有应用程序添加自动更新功能(通过exe4j启动java)。一切都适用于管理员,但非管理员不具有对已安装目录(c:\program files\myApp
)的写入权限。
我提出的所有解决方案都有点邪恶,所以我想我会问这里。以下是我迄今为止的想法:
c:\program files\myApp\bin
)。 处理这个问题的最正确/最不邪恶的方法是什么?
答案 0 :(得分:0)
我认为最好的方法是在%userprofile%\ AppData \ Local
中安装您的应用如果您的应用不是很大,那么这是您的最佳选择。例如,这就是Google Chrome的工作方式。
答案 1 :(得分:0)
您的所有想法都存在安全问题:任何人都可以轻松更改程序文件。谷歌浏览器存在同样的安全问题:恶意软件修改其文件要容易得多。
我绝对不建议更改C:\Program Files\myApp\bin
中的默认权限。
如果您想要防止重复,可以使用C:\ProgramData
,它对Program Files
的权限不太严格,但具有相同的安全风险。
因此,如果您关心用户的安全性,则应将应用程序安装到Program Files
。因此,您可以无意中修改文件的系统保护。
在将新文件写入Program Files
之前,您的更新程序应用程序会提升。缺点是用户必须在UAC提示符中单击继续按钮。如果更新相当罕见,那么这是最简单的方法。 Mozilla Firefox曾经使用过这种方法:浏览器下载了更新,在下次启动时显示UAC确认并将更新的文件写入Program Files
。
最近Firefox改变了它的更新体验。他们安装了一个处理更新的服务。这样,用户不会对UAC确认感到困扰,一切都对他们透明。他们启动Firefox,如果有更新,则服务启动,因为服务以系统权限运行,它具有对Program Files的写访问权限,文件被更新,然后启动更新Firefox,服务关闭(直到下一个更新)。
我更喜欢Firefox方法:保护文件不受文件系统权限的无意修改。与此同时,它现在默默地更新;在他们实施更新服务之前,我不介意在三个月内在UAC提示中按继续。