自我更新应用程序-哲学


15

这是一个哲学问题。

给定一个假想的桌面应用程序,并且希望提供自动更新(而不是强迫人们去网站,检查更新,下载更新,安装),这两种方法中的哪一种更“最佳实践”?

  1. iTunes一样,它会检查是否有新版本,并提示用户下载新版本。如果是这样,它将下载一个完整安装的可执行文件(在这种情况下,为Windows Installer文件(.msi)),该可执行文件将安装完整版本(而不仅仅是升级到以前的版本-如果在那里存在多个版本,将无法管理) 。假设是10.1.1版-无论是全新安装还是升级,都使用相同的文件。下载后,它指示用户关闭应用程序并自己运行安装文件。

  2. 与另一个版本类似,它检查新版本并提示用户下载它,但是它不仅为他们下载可执行文件并提示用户运行它,还为他们运行了它-关闭他们打开的程序,获取安装文件所需的安全性。

#2的问题:有关关闭程序的很多问题,因为该程序可以打开其他程序(OutlookExcel),或者如果用户处于中间位置该怎么办。同样,在安全性方面,您需要本地管理员访问权限才能安装,如果没有安装该怎么办?在更高版本的Windows中,您不能仅覆盖此人的安全性。

#1的问题:有些人认为这对于最终用户而言将太困难,太费力。

我强烈希望使用#1,因为它将节省我的项目80-120小时,并且更易于实现和维护。但是,我们的人在各个方面都有强烈的感觉。

这种事情的最佳实践是什么?


我不太确定这是哲学上的,听起来她正在为我寻找解决方案。

所以在这里问设计/建筑问题不是很好吗?

我的问题是,为什么#2要求程序关闭并重新启动?如果这是安全更新,那么这是可以理解的,但是普通用户每天至少关闭并重新打开一次程序(如果不是更多的话),那么为什么不将其安装在后台,让用户使用内存中的旧版本运行该程序,然后他们重新启动时,请使用已安装的新版本。没有大惊小怪,没有麻烦。
Mike S

@Mike S:这在Windows上是不可能的(无法覆盖正在运行的可执行文件),即使在Linux上,也不是一个特别好的主意(如果打开另一个实例,则将有一个运行旧代码,一个运行新代码-如果有IPC发生,情况甚至更糟)
Dean Harding

根据经验:如果您检查更新,则不要让您的程序每天在午夜或下午3点这样做。这似乎很合理,但是您可以结束DDOS自己的服务器。只需加上3600秒的随机性即可;这不是那么紧急。
MSalters 2011年

Answers:


20

就个人而言,我更喜欢Google Chrome的方法。具有启动程序的基本目录,以及每个已安装软件版本的子目录。启动器仅查找最高版本号并使用该版本号,并根据需要删除较旧的版本。更新程序任务经常运行,以下载并创建新目录。安装新版本后,正在运行的应用程序将请求重新启动以使用新版本。


4
+1指出Google的良好行为。相比之下,Adobe Acrobat Reader则每隔2天安装一些看似紧急的补丁,并不断干扰工作。
Ingo

我也喜欢这种方法。缺点是它仅适用于不需要提升的按用户安装。有了海拔高度提示后,您是否需要再单击几次来执行更新就没有关系了(不再安静了)。

@Cosmin如果您不想使用%appdata%,则可以使用%ProgramData%来存储下载的文件。从哲学上讲,更正确的方法是将存档存储在此处,然后在下次运行程序时提升安装位置。
培根钻头

喜欢这个答案,我把它放在后兜里(就目前而言,“ Itunes”风格的下载由于节省成本而受到广泛欢迎。)
Shannon Davis

3

您不应该创建不必要的启动项来检查Adobe Flash Player之类的更新(很难完全跟踪它们,而且我无法找到禁用检查的方法...)或iTunes。它使用户烦恼(无论如何,极客)。更好的选择是像Firefox一样在应用程序启动时检查更新。

一个简单的“安装更新?” 窗口不会惹恼用户。当用户执行其他操作时,让它在后台更新,然后自动启动您的应用程序。

只要确保包括一个选项:

在以下位置检查更新:

  • 登录(如果您想惹恼极客)
  • 应用程序启动(默认情况下处于启用状态
  • 每隔几周(默认关闭

或类似的东西。


如果值得付出努力,我会说。那是你的决定。


2

我认为您需要“ ClickOnce”设置。

http://msdn.microsoft.com/zh-cn/library/142dbbz4(v=vs.90).aspx

ClickOnce是一项部署技术,使您可以创建基于Windows的自我更新应用程序,这些应用程序可以在用户交互最少的情况下安装和运行。ClickOnce部署克服了部署中的三个主要问题:

难以更新应用程序。使用Microsoft Windows Installer部署,每当更新应用程序时,用户都必须重新安装整个应用程序;使用ClickOnce部署,您可以自动提供更新。仅下载应用程序中已更改的那些部分,然后从新的并排文件夹中重新安装完整的更新的应用程序。

对用户计算机的影响。在Windows Installer部署中,应用程序通常依赖于共享组件,从而可能导致版本冲突。使用ClickOnce部署,每个应用程序都是独立的,并且不会干扰其他应用程序。

安全权限。Windows Installer部署需要管理权限,并且仅允许有限的用户安装。ClickOnce部署使非管理用户可以安装并仅授予应用程序必需的那些代码访问安全性权限。


这不是单击一次和MSI(您的许多结论都不正确和/或不完整)的优缺点的问题,而是自动更新解决方案的最佳做法的问题。
Christopher Painter

无论如何,我都非常感谢这些信息,并且我将与开发人员共享该信息,以查看他是否将其视为一种选择-也许他认为他必须自己开发更新过程。

克里斯托弗(Christopher),直接从MSDN获得MS学位。这也是很有帮助的评论。

当它编码为部署技术时,当有人在MSDN上发帖弄错时,它永远不会令我惊讶。我们中很少有专家真正了解这些知识。
Christopher Painter

2

我个人开始欣赏与Sparkle框架类似的应用程序。我猜这只是Mac的事情,但实际上它可以做到以下几点(我想不到的是-我认为行为可以调整)。

  1. 检查更新(通常在应用程序启动时)
  2. 如果有一个,则会显示一个单独的窗口,其中包含格式正确的变更日志
  3. 然后,用户可以跳过该版本,安装该版本或选择稍后提醒
  4. 如果他决定安装该应用程序,则更改日志下方会显示一个进度条。
  5. 下载后,用户可以决定退出该应用程序并立即安装,或者在退出该应用程序后进行安装

考虑到您在谈论.msi,这个特定的框架并不是真正适用,但是在这种情况下,我宁愿使用一些现有的解决方案,也不想重新发明轮子。


1

我会说您确实必须了解您的用户。如果他们精明,或者对保持最新状态怀有浓厚的兴趣,那么#1就能奏效。

永远不要低估用户的懒惰,因为当他们的程序由于不再受支持而不再工作时,以后您会被服务台呼叫淹没。

时间要么来自开发(#2),要么来自支持(#1)。


1

那这个呢?

  • 在应用程序启动时,检查新版本,然后下载(可选地在询问用户之后)。
  • 下载完成后,请为用户提供一个按钮,该按钮允许您重新安装和重新启动应用程序(除非更新很重要,否则请不要使用对话框)。
  • 在应用程序关闭时,(可选地在询问用户之后)启动安装程序。如果用户此时拒绝进行安装(可能很急),请在应用程序启动前下次进行安装。

您不需要打扰用户,也不需要关闭任何内容...


1

为什么中间没有东西?

提示您安装下载的更新(执行.msi)后,提示下载(或使选项“自动下载” )。这样,您就可以消除#2的缺点(在用户工作中途关闭),而只需点击1次即可保持舒适感。

当用户最初拒绝时,“ 关闭并安装更新? ”对话框应该易于访问(但不会令人讨厌)。具有“启动<程序名称>”吗?.msi末尾的复选框几乎就像#2一样,实际上没有更多工作了

@ 现代Windows中的安全
程序可以请求权限以执行需要管理员权限的操作(显示提示用户,其中键入管理员密码,然后选择“是/否”是否授予权限)


1

我有124个当铺使用我的Pawnshop Management桌面应用程序。每当我有新更新时,我都会向他们广播电子邮件,让他们知道该更新及其详细信息。然后,他们可以选择通过登录我的网站进行FTP传输。他们还可以选择回滚更新。我的网站还跟踪每个当铺的安装版本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.