确定何时使用 Windows Installer 与 XCOPY

 

马丁·Wasznicky
Microsoft Corporation

2002 年 1 月

总结: 检查并比较部署 Microsoft .NET 应用程序的两种方法:DOS XCOPY 命令和 Microsoft Windows Installer 技术。 ) (8 个打印页

目标

  • 了解何时以及如何使用 XCOPY 部署 Microsoft® .NET 解决方案
  • 了解何时使用 Microsoft® Windows® Installer 部署 .NET 解决方案

假设

若要充分利用本文档,应遵循以下条件:

  • 你是一名经验丰富的 Microsoft® Visual Basic® 程序员
  • 你已使用 Microsoft® Visual Studio® 安装程序或 Microsoft Windows Installer 2.0 部署应用程序
  • 你已使用 XCOPY DOS 命令
  • 你有权访问 .NET 和 Microsoft® Internet Information Server (IIS)

目录

简介
使用 XCOPY
Windows Installer
Visual Studio .NET 中的新增功能
总结

简介

Microsoft .NET Framework提供了几项新功能,这些新功能可使应用程序部署像 XCOPY 操作一样简单。 许多开发人员熟悉部署传统 COM 应用程序的问题;注册类和类型库、维护二进制兼容性以及缺少并行组件部署 (这一切有时称为“DLL HELL”) 。 由于 COM 与注册表的依赖关系,Regedt32.exe已成为开发人员组件部署库中熟悉的工具。

随着程序集和版本控制引入.NET Framework,注册表的脐带最终被切断。 由于程序集是自我描述 (它们包含描述类型、资源和引用程序集) 的元数据,因此删除了它们对注册表的依赖,使 XCOPY 部署的承诺成为现实。

无论 XCOPY 部署听起来多么诱人,就像任何技术一样,它都有其局限性。 根据特定部署方案的复杂性和自动化需求,XCOPY 可能无法满足应用程序的部署需求。 在这些情况下,.NET Framework与 Microsoft Windows Installer 2.0 技术集成,为开发人员提供替代设置、分发和部署选项。 此外,Visual Studio .NET 提供基于 Windows Installer 2.0 技术构建的安装和部署项目。 这使开发人员能够轻松地为基于.NET Framework构建的更复杂的应用程序创建设置和部署包。

本文档涉及两个主要主题:

  • 使用 XCOPY: 用作 .NET 应用程序部署工具的 DOS XCOPY 命令的概述。 将讨论 XCOPY 的使用和限制,包括保留安全 ACL 信息、文件和文件夹属性、文件夹系统生成以及共享冲突。
  • Windows Installer: 概述 Windows Installer 技术,并检查 .NET 公开的功能。 还会检查何时使用 Windows Installer 技术与 XCOPY 的合适性。

使用 XCOPY

部署应用程序通常包括将最终应用程序或组件分发到将运行该应用程序的计算机。 由于 .NET 程序集的自描述性质,因此 的部署和复制。使用 XCOPY 的 NET 生成的应用程序已成为现实,因为在许多情况下,不再需要修改注册表或执行其他辅助任务,例如停止 Microsoft® Windows® NT 服务。 程序集的简单性使 XCOPY 成为在某些特定部署方案中使用的适当工具。

一些很容易进行 XCOPY 部署和复制的应用程序是 XML Web Services 和 ASP.NET Web 应用程序。 以前,这些类型的应用程序是使用 Internet Information Services (IIS) 和传统 COM 组件生成的。 为这些应用程序安装组件通常需要在部署过程中使用 Regsvr32.exe 实用工具注册组件。 更新现有组件要麻烦得多,因为 IIS 在组件上放置了独占文件锁。 释放锁的唯一方法是关闭 IIS。 替换现有组件通常包括以下步骤:

  1. 停止 IIS 服务。
  2. 使用 Regsvr32.exe 实用工具注销旧组件。
  3. 复制新组件。
  4. 使用 Regsvr32.exe 实用工具注册新组件。
  5. 启动 IIS 服务。

XML Web Services 和 ASP.NET Web 应用程序不再需要这些步骤。 IIS 不会在 .NET 程序集上放置排他文件锁,并且由于程序集是自描述的,因此不必注册它们。 这使得 ASP.NET 基于 Web 的应用程序非常适合 XCOPY 部署和管理。

例如,让我们演练如何将 XML Web 服务部署到位于同一 Windows NT 域上的远程计算机。 就此示例而言,Web 应用程序当前所在的客户端计算机名为 CLIENT1,Web 应用程序将部署到的远程计算机名为 SERVER1。

下面是要部署的 Web 应用程序的目录结构。

图 1. Internet Information Service 的 MMC on CLIENT1,显示要部署到 SERVER1 的 DemoWebSrv ASP.NET Web 应用程序的虚拟目录

在 /bin 子目录中,有一个名为 DemoWebSrv.DLL 的程序集。 CLIENT1 上目录结构的物理位置为 C:\INETPUB\WWWROOT\DEMOWEBSRV。 CLIENT1 上的 C:\INETPUB\WWWROOT 路径映射到 WWWROOT 的网络共享名称

让我们按照以下步骤开始部署方案:

  1. 在 SERVER1 上创建名为 WWWROOT 的网络共享,并将其映射到 InetPub 目录下的 wwwroot 子目录。 这是 IIS 默认网站的默认位置。 此位置将用作 XCOPY 命令的目标参数。

  2. 使用 XCOPY 将 CLIENT1 上的 DemoWebSrv 网站应用程序目录的文件夹结构和文件复制到 SERVER1。 在 DOS 提示符处,键入以下命令 (XCOPY 命令的第一个参数是要从中复制的源目录;第二个参数是要复制到) 的目标目录:

    XCOPY \\CLIENT1\wwwroot\demowebsrv 
    \\SERVER1\wwwroot\demowebsrv /E /K /R /O /H /I
    
  3. 在 SERVER1 上的默认网站下创建名为 DemoWebSrv 的虚拟目录,并将其标记为应用程序。 将其映射到新创建的 C:\INETPUB\WWWROOT\DEMOWEBSRV 目录。

接下来,你将找到 XCOPY 命令末尾使用的开关的说明。 若要查看更完整的列表,请在 DOS 命令提示符处键入 XCOPY /?

  • / E 复制源参数的目录、子目录和文件,包括空的目录。
  • / K 复制所有现有的文件和文件夹属性。
  • 使用 XCOPY 复制文件或目录树结构时,XCOPY 默认会去除文件属性。 也就是说,如果文件设置了只读属性,则一旦复制该文件,该属性就会丢失。 若要保留 () 复制文件的原始属性应用,请使用 / K 参数。
  • / R 覆盖标记为只读的文件。
  • / O 保留文件和文件夹的所有与安全相关的权限 ACL。
  • / H 复制隐藏文件和系统文件。
  • / 我 告诉 XCOPY 假定目标为目录,并在该目录不存在时创建它。 由于目标参数 <\\SERVER1\wwwroot\demowebsrv> 是一个不存在的目录,因此 XCOPY 会创建它。

就这么简单。 XCOPY 成功将 XML Web 服务部署到 SERVER1。 XCOPY 非常适合此类简单部署和动态更新。 XCOPY 还可用于在客户端上部署桌面应用程序。

与任何技术一样,在使用 XCOPY 部署 的方式和时间上存在一些限制。NET 生成的应用程序。 通常,XCOPY 仅在简单且手动执行的部署方案中有用。 下面列出了 XCOPY 不足以满足的一些情况:这些需要更可靠的部署方法。

  • 自动部署 .NET 应用程序要与之互操作的 COM 组件。 仍然需要注册。
  • 将程序集预编译为远程计算机上的本机代码。
  • 将程序集安装到远程计算机的全局程序集缓存中。
  • 更新以独占方式锁定的文件。 例如,用于托管 .NET 远程处理解决方案的 Windows NT 服务。
  • 安装。NET 生成的 Windows NT 服务。
  • 自动配置和创建 IIS 目录设置、NTFS 安全设置、网络共享以及 Active Directory 用户和组帐户。
  • 自动创建桌面快捷方式、添加到“添加/删除程序”、创建“开始”菜单条目等。

尽管 XCOPY 适用于简单的解决方案,但显然在很多情况下,需要更可靠的部署解决方案。 此类选项由基于 Windows Installer 2.0 技术的 Visual Studio .NET Installer 提供。 接下来我们将介绍这种操作。

Windows Installer

通常,应用程序设置要求要复杂得多,而那些可以通过简单的 XCOPY 部署策略来处理的要求。 在许多情况下,最终部署解决方案面向缺乏手动配置应用程序所需技能的最终用户。 在其他情况下,可能有许多配置要求 (例如用户和组的创建、安全性配置、目录结构的创建等) ,因此需要自动安装程序来确保最终应用程序的安装行为的准确性和一致性。 在任一情况下,XCOPY 部署通常都不足以满足此类要求。

对于更可靠的应用程序和部署需求,可以使用 Visual Studio .NET 生成安装和部署包。 Visual Studio .NET 部署基于 Windows Installer 技术构建。 Windows Installer 是 Microsoft® Windows 2000 和 Windows® XP 操作系统随附的软件安装和配置服务,可免费分发到所有 Win9x 和 NT4 平台。 Windows Installer Service 维护有关其安装的每个应用程序的信息记录。 WINDOWS Installer 运行时 (MSI) 在执行部署包期间检查这些记录。 卸载应用程序时,会检查记录,以确保在删除应用程序之前没有其他应用程序依赖于其组件。 Windows Installer 2.0 已扩展,提供以下功能以支持 .NET 程序集:

  • 在全局程序集缓存中安装、修复或删除程序集。
  • 在用户定义的位置安装、修复或删除程序集。
  • 回滚不成功的安装、修复或删除程序集。
  • 在全局程序集缓存中按需安装程序集。
  • 在用户定义的位置按需安装程序集。

除了这些功能,Visual Studio .NET 部署项目还允许其他安装程序的所有便利,例如读取和写入注册表项、创建目录、注册组件、在安装期间收集用户输入的数据等。 其他包含的功能包括:

  • 能够设置启动条件,例如检查当前用户名、计算机名称、物理环境、当前操作系统、是否存在 .NET CLR 等。
  • 能够在实际安装完成后运行自定义程序或脚本。 安装收集的数据可以传递给程序,如果程序生成错误,则可以回滚整个安装。 程序可以位于.dll、.exe、脚本或程序集中。

为了说明 Visual Studio .NET 部署,让我们演练部署以前使用 XCOPY 部署的 XML Web 服务。

  1. 若要开始,请使用 Visual Studio .NET 打开名为 DemoWebSrv 的现有 XML Web 服务项目。

  2. 在“ 文件 ”菜单上,单击“ 添加项目”,然后单击“ 新建项目”。 此时应会打开“新建项目”对话框, (请参阅图 2) 。

    图 2. 显示可用部署模板的 Visual Studio .NET 新建项目对话框

  3. 在“项目类型”下,单击“ 安装和部署项目” 文件夹,然后双击“ Web 安装项目” 模板。 Web 安装项目 (WebSetup1) 将添加到现有解决方案,并打开文件系统编辑器。

  4. “文件系统编辑器”中,单击“ Web 应用程序” 文件夹。

  5. “操作 ”菜单上,指向“ 添加”,然后单击“ 项目输出”。

  6. 在“添加项目输出组”框中 (图 3) ,从“项目”列表中选择“DemoWebSrv”。

    图 3. “添加项目输出组”对话框用于将特定文件从一个项目添加到另一个项目

  7. 从列表中选择“ 主输出 ”和“ 内容文件” 组,然后单击“ 确定”。 这会将内容文件、已编译的程序集及其依赖项添加到已编译的 Windows Installer 程序 (.msi 文件) 。

  8. “文件系统编辑器”中,单击“ Web 应用程序” 文件夹。 在 “属性” 窗口中,将 VirtualDirectory 属性设置为 DemoWebSrv。 将 DefaultDocument 属性设置为 Customers.asmx。 Windows Installer 使用信息在目标服务器的默认网站下创建虚拟目录,并设置其默认文档属性。

  9. 在“ 生成 ”菜单上,单击“ 生成 WebSetup1”。 这将创建一个WebSetup1.msi Windows Installer 安装程序文件。

  10. 将WebSetup1.msi文件复制到目标 Web 服务器计算机,然后双击该文件以运行安装程序。 若要访问刚刚部署的 Web 服务,请启动 Internet Explorer 并键入 URL <http://< ComputerName>/DemoWebSrv>。

Visual Studio .NET 中的新增功能是什么?

  • .NET 程序集的性质使 XCOPY 成为可行的部署选项。
  • Windows Installer 技术已得到扩展,可处理.NET Framework的部署需求。
  • Visual Studio .NET 部署工具基于 Windows Installer 技术构建。
  • Visual Studio 安装程序内置于 Visual Studio .NET 中。 安装程序模板作为新项目添加,并提供更出色的配置选项。

总结

的自我描述性质。NET 生成的程序集使使用 XCOPY 来部署和更新简单应用程序是可行的。 XCOPY 可以轻松地处理那些需要手动安装的部署方案,而依赖项和配置选项很少。 XML Web 服务和 ASP.NET Web 应用程序特别适合这种类型的部署,尤其是在应用程序开发阶段。

Visual Studio .NET 还提供其他基于 Windows Installer 的部署工具,允许更灵活、更可靠的配置和自动化要求。 使用 Visual Studio .NET 创建 Windows Installer 程序,开发人员可为要求最苛刻的应用程序创建复杂的安装程序。

要使用的部署选项最终取决于应用程序配置要求的范围和深度。

关于作者

Marty Wasznicky 是 Microsoft Corporation 的高级系统工程师,专注于企业应用程序集成、企业对企业和电子商务。 他拥有超过十年的企业和咨询能力,在 IT 行业构建和实施解决方案的经验。 他是 Microsoft 认证解决方案开发人员、Microsoft 认证系统工程师、Microsoft 认证数据库管理员和认证 Novell 工程师。 他在 Visual Basic 程序员杂志Access/VB/SQL 顾问 杂志上撰写了大量文章,目前在 Microsoft 南加州地区工作。

关于 Informant Communications 组

Informant Communications Group, Inc. (www.informant.com) 是一家专注于信息技术行业的多元化媒体公司。 ICG专门从事软件开发出版物、会议、目录发布和网站,成立于1990年。 ICG 在美国和英国设有办事处,是受人尊敬的媒体和营销内容集成商,满足了 IT 专业人员对优质技术信息的需求。

版权所有 © 2002 Informant Communications Group 和 Microsoft Corporation

技术编辑:PDSA, Inc. 和 KNG 咨询