【问题标题】:One-Click application moving from Windows Forms to WPF一键式应用程序从 Windows 窗体迁移到 WPF
【发布时间】:2011-02-19 15:19:53
【问题描述】:

我最近在WPF 中重新编写了一个 Windows 窗体应用程序,我需要将它发布给我的最终用户。我希望能够让用户转到 WPF 应用程序的 ClickOnce 安装点并删除他们的 Windows 窗体应用程序,这样他们的机器上就不会同时拥有这两个应用程序。

实现这一点的最佳方法是什么(阅读:对用户来说最简单)?

我考虑过创建一个先决条件命令行来检测旧版本并卸载,但我想避免编写类似只运行一次的东西。

【问题讨论】:

    标签: c# wpf winforms clickonce desktop-application


    【解决方案1】:

    我认为您实际上应该能够将 WPF 版本部署为 Windows 窗体应用程序的新版本。

    每个应用程序都针对哪个版本的 .NET Framework?

    两个项目的程序集名称是否相同,安装 URL 是否相同? (对于 ClickOnce,它与 projectGUID 无关。)

    【讨论】:

      【解决方案2】:

      我还没有尝试过,但是你可以让你的 WPF 应用程序直接替换你的 WinForms 应用程序吗?如果您发布到同一个文件夹,将正确的 GUID 从旧项目复制到新项目,它可能会无缝安装。

      这不会删除旧版本,但 ClickOnce 应用的每次更新都会保留旧版本。

      或者,您可以将现有的 WinForms 项目转换为 WPF 项目吗?它只是一组不同的程序集引用吗?我从未编写过 WPF 应用程序,如果这显然是错误的,请原谅我。

      【讨论】:

        【解决方案3】:

        为什么不简单地为新的 WPF 应用程序提供相同的 <ProjectGuid><PublishUrl> 等以及更高的主要版本号?

        ClickOnce 甚至不会意识到您从 WinForms 切换到 WPF 技术。

        正常的 ClickOnce 版本更新功能将在下次更新应用程序时自动将旧代码替换为新代码(如果需要,可以将其设置为自动发生)。

        【讨论】:

        • 我试过了,但 WinForm 应用程序没有显示更新对话框。当我启动 WPF 应用程序时,它与 WinForm 应用程序一起安装。您知道需要从一个项目复制到另一个项目以确保其具有相同的身份吗?
        • 我的记忆很模糊,所以我尝试了一些实验来确认。看来,如果新项目具有相同的程序集名称并使用相同的公钥签名,它将具有相同的 ClickOnce 身份。您确定您使用相同的证书来签署两个项目并且两个项目具有完全相同的名称吗?如果这已得到验证,我将尝试复制 AssemblyInfo.cs 中以 <Assembly: Assembly 开头的设置。如果它仍然不起作用,我可能会尝试在 .csproj 中复制 <ProjectGuid><PublishUrl>。希望其中一个可以解决问题。
        猜你喜欢
        • 2013-10-31
        • 1970-01-01
        • 2010-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多