更新 Windows 窗体应用程序的方法有哪些?

5

我需要一些有关如何更新我的应用程序的建议。表单应用程序将被放置在一个驱动器上供许多用户全天使用。在使用过程中如何更新程序或允许更新程序?如果我更新程序并为其创建一个新版本,试图复制粘贴到旧应用程序上将不起作用,如果其他人正在使用该应用程序,则无法复制。欢迎任何建议。


部署是一件棘手的事情。有许多不同的方法和产品来解决这个问题。在我工作的公司,我只是通过MSI和Active Directory Group Policy在重新启动时进行部署。不幸的是,由于你提到的原因,这已经是我们能做到的最好的了。 - rory.ap
2个回答

3

选项1:使用ClickOnce部署应用程序,并设置每次运行时检查更新。

ClickOnce:

在项目设置中,单击“发布”选项卡。

从这里,您可以配置应用程序发布的位置以及是否应只安装或仅在线提供。

一旦您将其全部配置好,您将使用“立即发布”按钮来编译并上传更新到发布位置。每次用户打开应用程序时,它都会在您设置的位置检查更新。要使您的应用程序以编程方式检查更新,请使用此MSDN链接中找到的代码 - https://msdn.microsoft.com/en-us/library/ms404263.aspx

您应该注意,用户将不再直接运行exe文件,并且您不会将exe文件复制到发布文件夹中。您的用户将不得不单击具有扩展名为.application的文件。用户可以创建指向此 .application 文件的快捷方式,放置在他们的桌面或任何其他地方。

还要注意,如果使用ClickOnce并发布了错误版本(例如带有错误的版本),则您的用户可以恢复到先前的版本,以便在您修复错误时继续使用应用程序。您的用户还可以选择跳过更新,因此您需要告知他们永远不要跳过更新。

选项2:创建一个应用程序来发布您的主应用程序

我承认这个答案不是一个好方法

您可以为发布主exe而创建另一个exe。发布exe将简单地尝试将新exe复制到旧exe上,并一直尝试,直到成功为止。当程序的所有实例都终止时,它将成功。

选项3:使用数据库
使您的应用程序检查指示更新可用的数据库值。在应用程序中提示用户关闭,并在设置为更新可用时不允许其他实例启动。


这是否意味着该应用程序必须安装在每个用户的计算机/登录凭据等上? - user6327557
不一定。您可以更改设置,仅允许从发布位置运行它。您还可以选择安装它。两种方式都可以正常工作。 - Michael Z.
1
这就是解决方案。当然,我可以将其编辑为有关如何使用ClickOnce的教程,但它非常简单,只需在Google上搜索即可。我提供了解决方案,但没有展示如何实现它。 - Michael Z.
你将不再直接发布exe文件,用户也不会运行exe文件。相反,他们将启动一个扩展名为“.application”的文件。 - Michael Z.
你可以在用户使用应用程序的同时进行发布,但是他们不会获得更新直到重新启动。你甚至可以在代码中进一步检查是否有更新,如果有,提示用户重新启动应用程序,这将自动为他们更新应用程序。 - Michael Z.
显示剩余19条评论

3
你可以使用nUpdate,这是一个免费且开源的.NET库,用于更新应用程序,并且还关注您的更新包的安全性,这是一个重要的因素。许多更新例程不验证它们下载的软件包,如果更新被恶意软件替换(就像某段时间前发生在puush服务上的情况),可能会导致严重的损坏。
nUpdate专为Windows Forms应用程序设计。目前它仍在不断改进中,将很快添加对WPF应用程序的支持,但当前版本非常稳定。

1
我从未听说过这个。我会自己去查一下。谢谢分享。 - Michael Z.
似乎是一个很棒的更新库。不幸的是,这个项目似乎已经死了 :(. - Florian
@thefiloe 目前已经暂停,是的。不过,版本4.0.0将会推出。 ;) - Dominic B.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接