转换为.NET 4后,ClickOnce升级失败

时间:2010-09-20 20:39:53

标签: .net clickonce

我们的应用程序是通过ClickOnce部署的.NET 3.5。我们只是升级到.NET 4.0并适当更新了预先安排。

对于通过设置HTML页面安装的首次用户或用户,安装仍然可以正常运行。它将自动为它们安装.NET 4框架。但是,已经安装了应用程序并尝试通过开始菜单运行它的用户会收到提示:

“无法安装或运行此应用程序。此应用程序要求您的系统更新为Microsoft公共语言运行时版本4.0.30319.0。可在此处找到更多信息”(链接到MS网站)

为什么它不会像从html页面运行时那样自动安装.NET 4.0?它甚至没有提供下载更新的选项。我们需要一个无缝的解决方案,让客户无需手动重新安装即可升级到新应用程序。

2 个答案:

答案 0 :(得分:5)

首先阅读this question and answer

以下是您的方案中发生的情况。

  1. “安装适用于初次使用的用户......”
    实际上,这适用于任何访问html页面的用户,而不仅仅是首次使用的用户。 html页面有一些脚本,用于检查4.0框架的用户代理字符串。如果他们没有它,它会给他们一个解释并告诉他们从Visual Studio创建的引导程序(setup.exe)的链接安装它。这与ClickOnce分开; ClickOnce nothing 直到他们点击指向.application文件的链接,或者他们运行setup.exe,它会在完成后启动.application文件。

  2. “已安装该应用程序并尝试通过开始菜单运行它的用户......”
    这里发生的是应用程序正确更新。他们得到了最新版本。只有他们无法运行最新版本,因为它是.Net 4.0可执行文件,并且没有4.0框架。

  3. 此时你有几个选择......

    • 和它一起生活。告诉用户他们需要访问html页面才能获得4.0 Framework。
    • 回滚到3.5并向您的应用添加自定义代码以检查是否安装了4.0,警告用户,并为他们提供指向新4.0 setup.exe文件的链接。一旦人们有机会安装它,几周后升级到4.0。如果您的用户偶尔只运行应用程序,这可能无法正常运行。
    • 回滚到3.5并将ClickOnce更新更改为在应用程序启动后而不是之前发生。这将使您有机会编写自定义代码以确定更新是否可以发生并告诉用户。

答案 1 :(得分:2)

另一种选择是回滚到.NET 3.5版本并添加自定义代码,以编程方式unisntalls应用程序并从具有.NET 4作为先决条件的其他URL重新安装它。已经拥有.NET 4的人只需要新安装ClickOnce位;有人的。 NET 3.5将卸载他们的应用程序,安装.NET 4,并安装新版本的应用程序。

您可以在此MSDN文章here中找到卸载/重新安装代码。