2012-05-10 164 views
2

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

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

  1. 提供一个新的InstallShield安装 - 安装程序是这样一旦安装了该程序比计划颇有几分 较大,送 出完整的安装程序似乎矫枉过正。
  2. 送出去只是MSI 文件 - 我不知道我该怎么去创造中VS2010的MSI安装程序。
  3. 下载新的应用程序文件(exe文件的一个大约7个10 DLL)和 用新的替换当前的文件。

有没有人有一个想法,哪个选项将是最好的,以及如何实现它?我需要某种代码签名并检查客户端的安全性吗?

感谢您的任何帮助。

编辑 - 应该提到ClickOnce不是一个选项。主要是因为它不适合我们的外观和感觉。 ClickOnce还有一些其他问题,我不会在这里讨论。

+2

为什么不使用ClickOnce? – animaonline

+0

您已标记为asp.net!它是网络应用程序吗? – Adil

+0

它有一个网络组件,但它不需要更新,所以我删除了标签。 – Oli

回答

2

嗯,我遇到了类似的情况。几年前,我们在发展与几个可选的松散耦合的组件产品。我们最终做的是当应用程序启动时,它检查我们的“UpdateService”并匹配元数据。

如果不更新应用程序,我们推出一个单独的进程来更新XML,从我们的更新服务,打倒在字节数组的DLL其拷贝相应文件夹中的XML和更新的DLL。

那对我们很有用。部分原因是客户可能会升级功能,我们可能需要下载更多的DLL。

然而,第一次安装的应用程序是通过安装程序(EXE)。

面临的挑战是,我们必须有适当的管理或补丁/组件的版本一起编写自定义的东西。但它足够被考虑和满足产品经理

+0

谢谢阿迪尔。你是否实施了代码签名等任何安全措施,以确保正在下载的DLL是来自你的,并且有人没有黑客入侵你的网络服务器并将病毒置于那里? – Oli

+0

是的,但我不记得确切。有多个级别的安全检查。例如,每个客户端都有加密许可文件和xml文件的元信息。再加上dll签名。 – Adil

+0

我使用DSE对下载的文件进行签名的自定义解决方案。标记这回答,因为它是最接近我写的解决方案。 – Oli

1

的ClickOnce似乎是一个不错的选择..

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

问候

+0

对不起,应该在我的问题中提到ClickOnce不是一个选项。我在我的开发环境中使用,但不适合生产。 – Oli

+0

你能解释一下为什么吗? – Oscar

+0

对我来说,我使用它进行一些早期的alpha测试,但是我在生产环境中非常担心它。当它出错时,可能会完全消失。我见过不仅需要清理自己的clickonce应用程序(手动清理Reg条目,文件等以进行卸载),而且还要查看安装在系统上的其他clickonce应用程序,这些应用程序可能与您无关。我知道这些情况很少见,但如果你有成千上万的用户安装应用程序,那么IMO不值得冒险。 – Oli

0

您将无法就地“撤换”的文件,除非你做的卷影拷贝(http://msdn.microsoft.com/en-us/library/ms404279.aspx)如果你没有使用ClickOnce,你将不得不有一些方法来检查应用程序中是否有更新。我会想象WCF对此是过度的;你可以简单地拥有一个已知的URL来获得可以与应用中的版本号进行比较的“版本号”,以及获得“最新”版本的已知网址......大多数应用只需下载MSI并询问用户执行它。