当为.NET WinForms应用程序创建自动更新功能时,如何更新DLL而不影响当前正在运行的应用程序?
由于应用程序在更新过程中正在运行,那么DLL会被锁定吗(因为这些DLL需要在更新期间被覆盖)?
当为.NET WinForms应用程序创建自动更新功能时,如何更新DLL而不影响当前正在运行的应用程序?
由于应用程序在更新过程中正在运行,那么DLL会被锁定吗(因为这些DLL需要在更新期间被覆盖)?
我有一个独立的“启动器”应用程序,通过 web 服务检查更新。如果有更新,它会下载更新,然后执行我的应用程序,该应用程序位于单独的程序集中。
其他替代方案包括使用 ClickOnce 或将文件下载到单独的区域并重新启动应用程序,正如其他人提到的那样。
请注意 ClickOnce - 它并不像听起来那么灵活。如果您部署到需要将您的程序提升到更高安全级别才能运行的系统上,并且没有为您的应用程序安装证书,则可能会遇到问题。当涉及到 ClickOnce 时,我很难在互联网上找到关于证书管理之类的明确答案。如果您的应用程序较为复杂,您可能需要自己开发更新程序,这就是我最终不得不做的。
如今,如果您的应用程序封装在MSIX包中,Windows可以通过AppInstaller自动进行更新。
它会在ProgramFiles\WindowsApps
文件夹内下载新版本的应用程序。当用户通过启动菜单运行应用程序时,系统会知道应该使用哪个文件夹。不使用的上一个版本将被删除。
如果您想了解如何以这种方式打包您的应用程序,我已经收集了这篇答案中的发现。