0

我正在向现有应用程序(通过 exe4j 启动的 java)添加自动更新功能。对于管理员来说一切正常,但非管理员将没有对已安装目录 ( c:\program files\myApp) 的写入权限。

我提出的所有解决方案都感觉有点邪恶,所以我想我会在这里问。以下是我到目前为止的想法:

  • 授予每个人对我的程序安装目录(例如c:\program files\myApp\bin)中子目录的写入权限。
  • 只安装一个小的boostrap到程序文件,其余的安装到用户家中(可能在AppData下)。这意味着每个用户都将拥有大部分应用程序的副本。
  • 在用户的主目录中安装整个应用程序

处理这个问题的最正确/最不邪恶的方法是什么?

4

2 回答 2

0

I think the best way would be installing your app in %userprofile%\AppData\Local

If your app isn't very large, that's your best option. For example this is the way Google Chrome works.

于 2012-09-11T16:46:29.230 回答
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 提示中按一次继续。

于 2012-09-12T06:31:09.350 回答