监理工程师培训
第 8 章部署应用程序
应用程序:使用 ClickOnce 进行用户启动的更新
此应用程序演示如何使用 ClickOnce 应用程序编程接口 (API) 向 Windows 窗体应用程序添加用户启动的更新功能。
新概念
在Visual Studio 2005 中,有三个可选的主要部署选项:Web、ClickOnce 和 Windows Installer 包。使用 MS-DOS XCopy 命令将应用程序文件从一个地方移动到另一个地方是另一种选项,它仍然是最简单、最直接的部署方法。它也最不灵活,实际上只适用于几种情况 — 例如,当更新 Web 应用程序(即使它应该只适合于不需要更新 IIS 元数据库的部署)或用于安装私有 程序集的情况。
ClickOnce是Visual Studio 2005 中引入的一种集成部署技术,允许从 Web 服务器安装和运行 Windows 应用程序,而几乎没有与用户进行交互。作为Microsoft Windows Server 2003、Windows XP、Windows 2000 和 Windows Me 附带的一部分,Windows Installer是一项安装和配置服务(作为单独的下载内容,它还可用于 Windows 9x 和Windows NT 4.0)。您将发现,在Visual Studio 2005 中构建于 Windows Installer 基础上的部署工具为提供了丰富的功能,可以快速部署和更新应用程序。
背景
组成 ClickOnce 的服务集合体现了这些技术的发展, Framework 的第一版中开始出现一种称为非接触部署(No-Touch) 的技术。在 Framework 1.0 版发布时,它马上就解决了开发人员面临的许多问题。在 Framework 上构建的托管应用程序得益于应用程序隔离和低影响部署(也称为 XCopy 部署)。通过提供一种共享组件和对组件进行版本控制的新方法, Framework 1.0 还更正了“DLL Hell”问题(即安装将破坏现有的软件,并有可能破坏将来的软件安装)。消除了 DLL 的版本问题,也就为思考部署 Windows 桌面应用程序的新方法打开了一扇大门,与基于 Web 的应用程序相比,Windows 桌面应用程序可以提供更多的功能,并且可以提供更丰富的用户体验。be true
how it ud to be
非接触部署作为一种基于 Web 的部署方法而出现,它允许安装Internet Explorer 5.01 或更高版本的用户从某个 URL 下载和安装 Windows 桌面应用程序,并在其本地计算机上运行它们,而无需运行通常的 。该部署机制还称为“href-exes”,它将桌面应用程序的丰富功能与Web 应用程序部署的简单性结合起来。
遗憾的是,直接从 Web 位置运行应用程序也存在局限性。首先,由 Web 页启动的应用程序仅在联机时可用,因此受网络连接的影响,这是由它们的本质决定的。href-exes 的另一个重要问题是其安全性问题。应用程序要运行,更有可能要求更改客户端上的默认安全策略。在 Visual Studio 的早期版本中,
开发人员在设计时几乎不可能确定应用程序所需的权限。毫无疑问,许多非接触部署被不可预见的安全限制“巨石”所击碎,使得这些部署不能用于生产中。非接触部署的另一个局限性是,它没有提供管理版本发布的标准机制。
ClickOnce 可以保护用户的计算机和应用程序。当 ClickOnce 下载和安装程序时,它不会更改自身文件以外的任何文件。可以设置更新策略,并利用 Framework 版本控制机制来管理更新。在本节中,您将看到一个应用程序,它阐释如何使用 ClickOnce 部署 API 允许用户自动更新 Windows 桌面应用程序。但在研究该实现的细节之前,我们来回顾一下 ClickOnce 的新功能,以及在必须从中选择的部署功能的范围内,它如何适合于Visual Studio 2005。您还将详细了解到,以声明方式实现 ClickOnce 部署和自动更新是多么简单。
注当我们讨论 ClickOnce 的安全性时,您将会更详细地了解到,Visual Studio 2005 IDE 中提供的工具使得无需推测计算和配置分布式 Web 胖客户端应用程序的安全需求。这是朝实现非接触部署的早期承诺迈进的一大步。
代码访问安全性
代码访问安全性 (CAS) 是公共语言运行库 (CLR) 的一种功能,它基于代码的标识执行安全性。作为一名开发人员,您可能并没有将使用 CAS 作为日常事务的一部分,因为保证代码安全的基础结构内置vodafone
于 Framework 库中。然而,为了做出关于应用程序安全需求的正确决策,了解 CAS 非常必要 — 特别是 Framework 如何处理证据、权限和代码组。同样非常重要的是,在开发项目的生命周期中,通常是在早期解决安全问题。详尽地讨论 CAS 超出了本书的范围。要了解更多信息,请访问 MSDN Web 站点(请参见
/library/default.asp?url=/library/en-us/cpguide/html/cpconcodeaccesscurity.a sp),该站点包含许多有关常见安全问题的文章,特别是有关 CAS 的文章;也可以阅读专门论述 Framework 安全性的书籍,例如 Writing Secure Code, 2nd Edition, by Michael Howard and David LeBlanc (Microsoft Press, 2003) 或 Framework Security, by Brian A. LaMacchia, et al. (Addison-Wesley, 2002)。
ClickOnce 的优点
雅思一对一的价格ClickOnce构建于此前的早期计划的基础上,旨在于解决许多与其他部署方法相关的障碍。
• 自动/自助服务更新非接触部署引入桌面应用程序基于 Web 的安装。ClickOnce 扩展了这种功能,提供一种自动更新应用程序或允许用户根据自己的判断来更新应用程序的机制。无需用户重新安装整个应用程序也可以应用更新。
• 独立应用程序为了避免有时发生与使用共享组件的应用程序相关的版本冲突,ClickOnce 将应用程序部署为一个独立的实体,该实体不会影响其他应用程序。即,通过 ClickOnce 安装的应用程序不会被以后的应用程序安装破坏。
• 非管理员安装只有具有管理员权限时才能运行 Windows Installer 应用程序。具有较低权限的帐户可以安装 ClickOnce 应用程序,而且只授予它们运行该应用程序所需的权限。
• 脱机访问通过 ClickOnce 部署的应用程序可以安装为联机运行或本地运行。在后一种情况中,它们与 Windows Shell 集成在一起,包括为应用程序添加一个“Start”菜单快捷方式。这样就可以随时随地访问 Web 部署的应用程序。
注对于 Framework 的 1.0 和 1.1 版本,Microsoft 为提供了更新应用程序块,作为进一步扩展非接触部署优点的一种方法。该应用程序块由 Microsoft 模式与实践小组开发和发布,可以从 MSDN 免费下载,它包含文档和自定义 程序集(带有源代码),供开发人员为应用程序添加自助更新功能。(请参见
/library/default.asp?url=/library/en-us/dnbda/html/updater.asp。)
在资金、时间和精力方面,ClickOnce 部署也提供了非常高的成本效益。设想一下,这些节约下来的
投入肯定能对应用程序设计中的关键决策点产生影响:由于需要一种方式来轻松地将应用程序提供给广大用户,并需要能够快速而简单地更新该应用程序,您已经多少次将解决方案构建为基于 Web 的应用程序?如果您是一名在托管网络环境中工作的开发人员,那么您将面临网络管理员带来的其他障碍 — 他们不愿意或不会支持部署更新,而该部署更新又要求在网络上的每个客户端系统中运行安装程序。
说到底,将解决方案构建为基于 Web 的应用程序是最顺畅的方式,这有几个很充分的理由。虽然牺牲了高级功能和丰富的用户界面,但部署和更新 Web 应用程序将更容易、更经济且更为轻松。ClickOnce 使得不需要在功能和容易部署之间进行折衷,因为它为胖客户端应用程序提供了简单和可靠的 Web 应用程序部署方式。
所有这些都表明,基于 Web 的应用程序将不会过时。它们仍可以为需要在各种操作系统上运行的解决方案提供无所不及的功能。对于完全功能的客户端安装,Windows Installer 包依然是最佳选择。但是,在许多情况下,开发人员现在有望将胖客户端应用程序提供给用户,而无需面对部署约束,而在过去,这些约束使得这种部署方式成为一种不切实际的选择。
作为其核心,ClickOnce 是内置于 CLR 中的一组新部署功能。这些功能包括一个可编程的界面,以及集成在Visual Studio 2005 IDE 中的设计时支持。此外,还可以将 ClickOnce 部署功能直接内置于应用程序本身中,而不需要构建一个单独的安装程序。
发布 ClickOnce 应用程序
ClickOnce 技术集成在Visual Studio 2005 IDE 中的两个主要部分。第一部分是“Build”菜单,它包含一个“Publish”菜单项。同样的命令在解决方案资源管理器中的解决方案和项目上下文菜单中也可用。Visual Studio 2005 IDE 中的第三个发布选项使用命令按钮,该命令按钮在项目设计器的“Publish”窗格中可用。(这表示Visual Studio 2005 IDE 与 ClickOnce 集成的第二个主要部分。)选择“Publish”菜单命令(或单击“Publish”窗格中的“Publish Wizard”按钮)将启动“Publish Wizard”(如图 8-1 所示),这种工具可指导您完成发布所需的步骤。
图 8-1 发布向导。
发布向导的第一页要求选择应用程序的位置。该向导的其他步骤同样允许更改其他部署设置(例如,安装模式和用户安装应用程序的方式,以及选择签名应用程序和部署清单所需的公钥/私钥)。如果需要更改,请单击“Next”按钮,使向导前进一步。完成更新设置后,单击“Finish”。
星期四英文注部署清单是一个描述 ClickOnce 应用程序部署的 XML 文件,包括部署的当前版本、更新配置设置,以及最重要的 ClickOnce 应用程序的应用程序清单的当前版本。aet
注应用程序清单是一个标识利用 ClickOnce 部署的应用程序的 XML 文件,包括标识应用程序的主要程序集、它的安全需求、应用程序使用的非程序集文件列表,以及应用程序运行所需的任何依赖项。
当首次发布应用程序时,Visual Studio 2005 在名为publish 的解决方案中创建一个新文件夹,并将安装应用程序所需的文件存储在该目录中,包括部署清单和包含应用程序先决条件的引导程序。它还生成一个带有指向程序安装和先决条件的链接的 Web 页。如果将某个 Web 站点指定为发布的位置,ClickOnce 发布引擎就在目标 Web 服务器上创建一个虚拟目录,并将文件从本地发布文件夹复制到该位置。最后,ClickOnce 在 Web 浏览器中打开一个发布页,如图 8-2 所示。
图 8-2 发布页。
毫不气馁的意思安装和运行 ClickOnce 应用程序
如果部署应用程序是为了脱机使用(这是默认的安装模式),单击应用程序链接就可以开始在用户的计算机上安装应用程序。如果将应用程序配置为只可联机使用,那么将直接从发布页启动它。图 8-3 显示当尝试安装应用程序时接收到的安全确认消息。
图 8-3 安装确认对话框。
用户单击“Install”按钮后,应用程序就安装在用户计算机上的一个本地文件夹中。安装成功后,ClickOnce 子系统会自动从本地安装目录运行此应用程序。
更新 ClickOnce 应用程序
将更新传递给应用程序的过程与发布应用程序原始版本的过程相同。发布更新之前唯一要做的事情就是增加应用程序的版本号。可以自动或手动增加发布版本号。默认情况下,将发布版本设置为每次发布应用程序就自动增加修订号。但是,如图 8-4 所示,可以清除“Automatically Increment Revision With Each Relea”复选框来手动设置该值。
图 8-4 发布版本。
发布版本和应用程序程序集的版本号完全无关,注意到这一点非常重要。如果将应用程序配置为每次发布自动增加版本号,那么对于发布ClickOnce 应用程序的新版本而言,最容易的方法是单击项目设计器中“Publish”窗格中的“Publish Now”按钮。发布子系统编译更新的应用程序,并将程序集和与其相关的应用程序清单存储在发布位置的一个新文件夹中。它还更新部署清单以指向新的应用程序清单。下次用户打开应用程序时(并假定将应用程序配置为检查更新),用户计算机上的 ClickOnce 运行时会发现新版本,然后通知用户更新可用或自动安装更新。
图 8-5 显示了一个典型的更新通知对话框。在该示例中,可以选择安装应用程序的更新版本或跳过更新。在 ClickOnce 应用程序的更新配置设置中,可以控制用户是否可以选择拒绝更新。
kyx
武汉日语培训
图 8-5 更新通知。
为了更好地理解 ClickOnce 应用程序如何获知应用程序的更新可用时间,可以研究图 8-6 所示的文件和文件夹。该图阐释一种典型的更新情况,即存储在 WeatherReport_1.0.0.0 文件夹中的应用程序的原始版本已经由存储在 WeatherReport_1.0.0.1 文件夹中的更新的版本进行更新。
图 8-6 已发布的应用程序文件。
部署清单(图 8-6 中所示的WeatherReport.application 文件)包含一个应用程序最新版本的条目。当应用程序检查更新时,ClickOnce 查看部署清单,并将其与应用程序的当前版本进行比较。如果可用版本比应用程序的当前版本更新,则 ClickOnce 或者显示一条提示消息来通知用户更新可用,或者自动更新应用程序,这取决于您如何配置更新应用程序设置。
图 8-7 阐释这个过程。服务器包含应用程序原始版本和更新版本 (1.0.0.1) 的应用程序文件。部署清单显示,应用程序有一个更新的版本可用。当已安装的应用程序执行更新检查时,它将阅读部署清单,
并了解是否有一个更新可用。