C# .net应用程序更新

C# .net应用程序更新,c#,.net,visual-studio,visual-studio-2010,C#,.net,Visual Studio,Visual Studio 2010,我即将发布一个应用程序的Beta版,并希望确保它可以远程更新,并在应用程序中通知用户更新存在。理想情况下,如果可能的话,我想强制更新。我目前正在使用VS2010打包的InstallShield LE来构建我的安装exe文件 我的计划是创建一个wcf web服务,该服务将提供所有产品版本的XML manifect。 我不确定的是如何交付更新。我能想到的选择是 交付一个新的installshield安装程序-该安装程序非常复杂 比程序大,因此一旦安装程序,发送 完整的安装程序似乎有些过分了 只发送m

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

我的计划是创建一个wcf web服务,该服务将提供所有产品版本的XML manifect。 我不确定的是如何交付更新。我能想到的选择是

  • 交付一个新的installshield安装程序-该安装程序非常复杂 比程序大,因此一旦安装程序,发送 完整的安装程序似乎有些过分了
  • 只发送msi 文件-我不确定如何在VS2010中创建MSI安装程序
  • 下载新的应用程序文件(exe和大约7 10个DLL)和 用新文件替换当前文件
  • 有没有人想过哪种选择是最好的,以及如何实施?我需要在客户端进行某种代码签名和安全检查吗

    谢谢你的帮助


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

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


    致以最诚挚的问候

    除非您进行了卷影复制(),否则您将无法“替换”文件。如果您不使用ClickOnce,则必须有一些方法在应用程序中“检查”是否有更新。我认为WCF在这方面做得太过分了;你可以简单地使用一个已知的URL来获取一个“版本号”,该版本号可以与应用程序中的版本号进行比较,而使用一个已知的URL来获取“最新”版本。。。大多数应用程序只是下载一个MSI并要求用户执行它。

    几年前我遇到过类似的情况,我们开发了一款带有几个可选松散耦合组件的产品。我们最终要做的是,当应用程序启动时,它检查我们的“更新服务”并匹配元数据

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

    这在当时对我们很有效。部分原因是客户端可能会升级功能,我们可能需要这些功能来下载其他DLL

    然而,应用程序的第一次安装是通过安装程序(exe)进行的


    我们面临的挑战是,我们必须编写自定义内容,并对修补程序/程序集进行适当的管理或版本设置。但这已经足够好了,足以让产品经理满意了

    对不起,我应该在问题中提到ClickOnce不是一个选项。我在我的开发环境中使用它,但不适合生产环境。对我来说,我正在使用它进行一些早期的alpha测试,但我非常担心它在生产环境中。当它出错时,可能会完全耗尽支撑力。我见过这样的情况,你不仅需要整理你自己的clickonce应用程序(手动清除注册表项、文件等,以便卸载),而且还需要开始查看安装在系统上的其他clickonce应用程序,这些应用程序可能与你无关。我知道这种情况很少见,但是如果你有成千上万的用户在安装一个应用程序,在我看来,这是不值得冒险的。你已经标记了asp.net!是网络应用吗?它有一个网络组件,但不需要更新,所以我已经删除了标签。谢谢Adil。您是否实施了任何类型的安全措施,如代码签名,以确保正在下载的DLL来自您,并且没有人入侵您的web服务器并在那里放置病毒?是的,但我记不清了。有多个级别的安全检查。例如,每个客户端都有加密的许可文件和元数据信息的xml文件。加上DLL已签名。我使用了一个自定义解决方案,在下载的文件上使用DSE签名。标记这个答案是因为它与我所写的解决方案最接近。