在Windows中安装自动更新的应用程序的正确方法是什么?

时间:2012-09-11 16:19:40

标签: windows installer

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

我提出的所有解决方案都有点邪恶,所以我想我会问这里。以下是我迄今为止的想法:

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

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

2 个答案:

答案 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提示中按继续