【问题标题】:.net Application Updates.net 应用程序更新
【发布时间】:2012-05-10 15:35:31
【问题描述】:

我即将发布一个应用程序的 Beta 版本,并希望确保它可以远程更新,用户会在应用程序中收到更新存在的通知。理想情况下,如果可能的话,我想强制更新。我目前正在使用与 VS2010 一起打包的 InstallShield LE 来构建我的安装 exe 文件。

我的计划是创建一个 wcf Web 服务,它将提供所有产品版本的 XML 清单。 我不确定如何提供更新。我能想到的选项是

  1. 提供新的 installshield 安装程序 - 安装程序相当多 比程序大,所以一旦安装了程序,发送 完整的安装程序似乎有点矫枉过正。
  2. 只发送 msi 文件 - 我不确定如何在 VS2010 中创建 MSI 安装程序。
  3. 下载新的应用程序文件(一个 exe 和大约 7 10 Dlls)和 用新文件替换当前文件。

有没有人想过哪个选项最好以及如何实施?我是否需要某种代码签名并在客户端检查安全性?

感谢您的帮助。

EDIT-应该提到 ClickOnce 不是一个选项。主要是因为它的可定制性不足以适应我们的外观和感觉。还有一些关于 ClickOnce 的其他问题,我不会在这里讨论。

【问题讨论】:

  • 您已标记asp.net!是网络应用吗?
  • 它有一个网络组件,但不需要更新,所以我删除了标签。

标签: c# .net visual-studio visual-studio-2010


【解决方案1】:

好吧,几年前我也遇到过类似的情况,我们正在开发一种产品,其中包含几个可选的松散耦合组件。我们最终要做的是当应用程序启动时,它会检查我们的“UpdateService”并匹配元数据。

如果应用程序未更新,我们会启动一个单独的进程来更新 XML 并从我们的更新服务中删除字节数组中的 DLL,该更新服务会复制相应文件夹中的 XML 和更新的 DLL。

当时这对我们有用。部分原因是客户端可能会升级功能,而我们可能需要它来下载额外的 DLL。

但是,应用程序的第一次安装是通过安装程序 (exe)。

挑战在于我们必须编写自定义内容以及正确的补丁/程序集管理或版本。但足以让产品经理考虑和满足

【讨论】:

  • 谢谢阿迪尔。您是否实施了任何类型的安全措施,例如代码签名,以确保正在下载的 dll 来自您,并且没有人入侵您的网络服务器并在那里放置病毒?
  • 是的,但我记不太清了。有多个级别的安全检查。例如,每个客户端都有加密的许可文件和用于元信息的 xml 文件。加上 dll 已签名。
  • 我采用了一个自定义解决方案,对下载的文件进行了 DSE 签名。将此标记为已回答,因为它最接近我编写的解决方案。
【解决方案2】:

ClickOnce 对你来说似乎是个不错的选择。

http://msdn.microsoft.com/en-us/library/t71a733d(v=vs.80).aspx

最好的问候

【讨论】:

  • 抱歉应该在我的问题中提到 ClickOnce 不是一个选项。我在我的开发环境中使用,但不适合生产。
  • 对我来说,我将它用于一些早期的 alpha 测试,但在生产环境中我非常担心它。当它出错时,可能会完全耗尽支持。我见过这样的情况,您不仅需要整理自己的 clickonce 应用程序(手动清除 Reg 条目、文件等以卸载),还需要开始查看安装在系统上可能与您无关的其他 clickonce 应用程序.我知道这些情况很少见,但如果您有成千上万的用户安装应用程序,那么 IMO 不值得冒险。
【解决方案3】:

除非您进行了影子复制 (http://msdn.microsoft.com/en-us/library/ms404279.aspx),否则您将无法就地“替换”文件如果有更新。我想 WCF 对此太过分了。您可以简单地拥有一个已知的 URL 来获取可以与应用程序中的版本号进行比较的“版本号”,以及一个已知的 url 来获取“最新”版本......大多数应用程序只需下载 MSI 并询问用户执行它。

【讨论】:

    猜你喜欢
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 2020-12-01
    相关资源
    最近更新 更多