我通过谷歌和搜索引擎优化搜索了这个问题的可能答案,但只能找到分散在这个地方的一小部分信息,其中大部分似乎是个人意见。
我知道这个问题可以被认为是主观的,但我不是在寻找个人观点,而是寻找具有理由的事实(例如过去的经验),甚至是寻找最佳实践的博客/维基的单一链接(这是我更喜欢诚实的东西)。我不想要的是如何使这项工作,我知道如何创建自我更新的桌面应用程序。
我想了解创建自我更新桌面应用程序的最佳实践。我特别好奇的那种最佳实践是:
- 如果客户端软件已过期,您是否强制更新,但在尝试与其他版本的软件或数据库本身进行通信时不会中断?如果是这样,您如何表示这一突破性变化?
- 您应该多久检查一次更新?每周/每日/每小时,究竟是为什么?
- 用户是否可以看到更新,或者从UI的角度在幕后运行?
- 如果不是重大更新,您是否应该通知用户有可用的更新? (例如,在应用程序的远程部分修复单个按钮,只有一个用户实际需要)
- 您是否应该尝试修补应用程序,还是从头开始重新下载整个应用程序?
- 您是否应该允许用户从中心位置更新或仅允许通过指定的应用程序进行更新? (对于封闭的业务应用程序)。
当然有一些关于这个东西的书面规则/建议?关于很多应用程序最烦人的事情之一就是更新,因为很难在“过时”和“在用户面前”之间找到一个很好的平衡点。
如果有人认为这是用单个客户端编写的.net C#,在与更新服务器具有持续可用连接的机器上运行,所有这些机器都通过应用程序相互通信,并且所有这些机器都与中央数据库服务器通信。
很难给出一般答案。这取决于上下文:更新的关键性,它是什么类型的应用程序,用户首选项,#users,网络宽度等。以下是一些选项/权衡。
如果客户端软件已过期,您是否强制更新,但在尝试与其他版本的软件或数据库本身进行通信时不会中断?如果是这样,您如何表示这一突破性变化?
作为开发人员,您最感兴趣的是让所有应用程序尽可能地保持最新状态。这减少了您的维护工作量。因此,如果用户不介意你应该更新。
您应该多久检查一次更新?每周/每日/每小时,究竟是为什么?
如果更新对用户是透明的,不要求立即重新启动应用程序,那么我建议您在通信带宽允许的情况下这样做(考虑更新检查 - 频繁但很小 - 和下载 - 不常见但很大)
用户是否可以看到更新,或者从UI的角度在幕后运行?
取决于用户首选项,还取决于更新类型:错误修复与功能/ UI更改(用户会感到困惑,看到外观已经改变,没有先前的警报)
如果不是重大更新,您是否应该通知用户有可用的更新? (例如,在应用程序的远程部分修复单个按钮,只有一个用户实际需要)
与前一个问题相同的论点
您是否应该尝试修补应用程序,还是从头开始重新下载整个应用程序?
如果应用程序大小很小,请从头开始下载。这将防止创建不同补丁(“DLL地狱”)之间不匹配的所有类型的奇怪错误。但是,这可能需要大量下载时间或对您的网络造成严重损失。
您是否应该允许用户从中心位置更新或仅允许通过指定的应用程序进行更新? (对于封闭的业务应用程序)。
我想都是
很难给出一般答案。这取决于上下文:更新的关键性,它是什么类型的应用程序,用户首选项,#users,网络宽度等。以下是一些选项/权衡。
如果客户端软件已过期,您是否强制更新,但在尝试与其他版本的软件或数据库本身进行通信时不会中断?如果是这样,您如何表示这一突破性变化?
作为开发人员,您最感兴趣的是让所有应用程序尽可能地保持最新状态。这减少了您的维护工作量。因此,如果用户不介意你应该更新。
您应该多久检查一次更新?每周/每日/每小时,究竟是为什么?
如果更新对用户是透明的,不要求立即重新启动应用程序,那么我建议您在通信带宽允许的情况下这样做(考虑更新检查 - 频繁但很小 - 和下载 - 不常见但很大)
用户是否可以看到更新,或者从UI的角度在幕后运行?
取决于用户首选项,还取决于更新类型:错误修复与功能/ UI更改(用户会感到困惑,看到外观已经改变,没有先前的警报)
如果不是重大更新,您是否应该通知用户有可用的更新? (例如,在应用程序的远程部分修复单个按钮,只有一个用户实际需要)
与前一个问题相同的论点
您是否应该尝试修补应用程序,还是从头开始重新下载整个应用程序?
如果应用程序大小很小,请从头开始下载。这将防止创建不同补丁(“DLL地狱”)之间不匹配的所有类型的奇怪错误。但是,这可能需要大量下载时间或对您的网络造成严重损失。
您是否应该允许用户从中心位置更新或仅允许通过指定的应用程序进行更新? (对于封闭的业务应用程序)。
我想都是
许多软件忽略的一个最佳实践:要求在用户关闭应用程序时更新,而不是在它刚刚启动时更新。
令人难以置信的是有多少应用程序没有这样做(例如Firefox)。您刚刚运行该应用程序,您想立即使用它,相反,它会提示您是否要更新,这当然需要5分钟并且需要重新启动应用程序。
这是无稽之谈。只需在最后进行更新。
根据实际经验,不要忘记添加更新更新引擎的功能。这意味着执行更新通常是两步法
- 检查更新引擎是否有更新
- 检查实际应用程序是否有更新
如果是客户端,您是否强制更新?
软件已过时,但不会
在尝试沟通时打破
与其他版本的软件或
数据库本身?如果是这样,你怎么样
表示这种突破性变化?
通常的做法是使用“ProtocolVersion”方法,该方法指示允许的最低/最旧版本。
“ProtocolVersion”可以由客户端或服务器提供,具体取决于客户端和服务器之间的信任级别。在低信任级别中,最好让客户端提供“ProtocolVersion”,然后在客户端更新之前拒绝访问服务器端。在“高信任级别”场景中,让服务器提供它接受的“ProtocolVersion”更容易,然后适应这一点的所有逻辑 - 包括更新客户端应用程序 - 仅在客户端中实现。提供版本检查/处理代码只需要在一个地方的好处。
- 如果客户端软件已过期,您是否强制更新,但在尝试与其他版本的软件或数据库本身进行通信时不会中断?如果是这样,您如何表示这一突破性变化?
问用户。
- 您应该多久检查一次更新?每周/每日/每小时,究竟是为什么?
问用户。
- 用户是否可以看到更新,或者从UI的角度在幕后运行?
问用户。
- 如果不是重大更新,您是否应该通知用户有可用的更新? (例如,在应用程序的远程部分修复单个按钮,只有一个用户实际需要)
询问用户(注意这里的趋势?)。
- 您是否应该尝试修补应用程序,还是从头开始重新下载整个应用程序?
通常,补丁,如果应用程序具有任何显着大小。
就“询问用户”的反应而言,并不意味着每次都会提示他们。相反,给他们 选项 设置他们应该被提示的内容以及应该无形地做什么(并且第一次发生特定的事情,询问他们将来应该做些什么,并记住这一点)。这应该不是很困难,你会从很大一部分用户群中获得很多善意,因为很难有固定的设置适合每个使用你的应用程序的人的愿望。如果有疑问,更多的选择比更少的选择更好 - 特别是当它们是那种对代码相当微不足道的选项时。