Visual Studio 2010将于2010年第一季度发布,今天我们将探讨的是Visual Studio 2010开发部署64位程序。通常来说,采用64位的应用程序与操作系统能够在很大程度上改善性能。这主要是因为其可以提供更大的内存访问。如普通的32位应用程序,内存最多只支持4G,这包括操作系统运行所需要的内存。为此如果应用程序所占用内存的增加势必以减少操作系统所占用的内存为代价。因为总的内存大小不变,那么必定是一种此消彼长的情况。
64位应用程度到底能够带来哪些方面的优势,不是笔者这里阐述的重点。只是为了引出64位应用程序开发与部署的问题而作的引子。那么程序开发人员该如何开发与部署64位的应用程序呢?笔者这里以Visual Studio平台为例,谈谈这个问题。
一、 部署64位应用程序的方法
在Visual Studio平台中,主要提供了两种应用程序的部署方式,分别为ClickOnce 和 Windows Installer技术。者两种技术各有各的特点。ClickOnce的核心功能如果用一句话概括,就是从点到面的部署。如在实际工作中,管理员可以将应用程序发布到企业网络中的一个中心位置,然后用户再从这个位置进行应用软件的安装或者运行。而不需要复制安装文件。微软操作系统下的补丁自动更新采用的就是这种策略。而Windows Installer技术就是我们常见的那种以setup.exe作为安装文件的应用程序软件。将源代码编译后打包到setup.exe的文件中,并将这个文件分发给用户。然后用户通过运行这个文件来安装部署应用程序。
这两种部署方式并没有优劣之分,只是分别适用于不同的场合而已。在实际工作中,程序开发人员往往需要根据应用程序的类型、应用程序的位置、应用程序更新的频率等因数来考虑。如应用软件还在开发测试阶段需要经常更新,或者由于其他原因需要进行不断更新的,此时采用ClickOnce模式比较好。因为这种部署方式下应用程序可以自动进行更新。如只需要在中心位置的应用程序包更新了,则部署在各个客户端上的应用程序会自动更新。所以说对于要经常更改的应用程序来说(如在测试阶段或者打补丁的需要)采用这种方式是比较好的选择。不过这种部署方式有一个缺陷,即灵活性没有Windows Installer技术。Windows Installer部署的软件包给我们一个最直观的印象就是用户可以自主选择需要安装的功能,如Office软件安装的时候。而Windows Installer技术的缺席就在于不会自动更新。如当某个应用软件有需要更改的时候,要重新编译将文件打包到setup文件中,或者通过补丁的形式来进行更新。客户端上已经部署的应用软件不会自动更新。
所以笔者说,这两种部署方式没有优劣之分,只是分别适合用于不同的场合而已。在使用Visual Studio平台来开发部署64位应用程序的时候,开发人员首先需要选择的是采用那种方式来部署应用软件。从技术上来说,这两种部署方式都可以支持64位的应用程序。主要还是看应用程序的类型(如是否需要更新)等等。
二、 部署64位应用程序的步骤
通常来说,微软两种应用程序的部署方式都是支持64位的应用程序的 。当然Visual Studio平台还支持第三方软件来部署应用软件。此时程序开发人员就需要注意,这些第三方的专业工具是否能够很好的支持64位应用程序。有时候虽然通过Visual Studio平台开发的应用软件支持64位,但是采取的第三方部署软件却不支持,此时就会出现错误。故程序开发人员如果要开发64位应用程序,笔者还是建议采用微软自带的部署工具即可,不仅免费而且兼容性好。除非用户还有其他一些特殊的要求。
如果使用ClickOnce技术在部署64位的应用程序比较简单。只需要按照如下四个步骤就可以完成。第一步单击项目的节点,然后选择 属性,打开“项目设计器”。或者可以通过解决方案资源管理器来打开项目的属性窗口。不过根据笔者的经验,后者有时候属性窗口有可能为灰色,无法打开项目设计器。笔者现在还是喜欢采用项目节点来打开项目设计器。然后在打开的窗口中选择“编译”、“高级编译选项”,此时就会打开一个“高级编译设置”对话框。最后在这个对话框中,选择目标CPU的类型,只要选择X64等等即可。这里需要注意,在选择CPU的时候还可以选择任何CPU。这表示其即可以支持64位的平台,而且还可以支持32位的平台。不过笔者不建议这么处理。因为这可能会带来一些稳定性或者其他方面的问题。如果真的需要两个平台的应用程序包,那么还不如同时编译两个。然后根据不同的平台来选择不同的程序包。其实这个原理跟驱动程序的原理类似。虽然有些显卡可以使用一些通用的驱动程序,但是稳定性或者性能上都没有专业的驱动程序来的强。微软之所以还提供“任何CPU”这个选项主要出于兼容性的考虑。程序开发人员在使用这个选项的时候,还是需要多从兼容性与性能上去考虑。
如果使用Windows Install技术在部署64位的应用程序时,跟部署32位的应用程序过程基本一致,笔者这里就不做过多阐述了。只是对其中的一些差异做一些说明。一般来说,32位与64位MSI包的处理方式一样,只是在处理文件夹变量的方式有点不同。另外将组件写入到注册表中的方式也有所不同。不过这些不同并不是64位应用程序部署过程中的重点。因为这些内容系统都会自动完成,不需要程序开发人员手工干预。
三、 部署64位应用程序的注意事项
当程序开发人员在部署64位应用程序的时候,笔者认为主要要注意如下几个内容。
一是为不同的平台生成不同的包。无论采取上面何种部署方式,Visual Studio都支持32位与64位的平台,而且用户还可以选择“任何CPU”,来提高应用程序包的兼容性。不过这不是最佳的选择。通常情况下,一些比较有经验的程序开发人员都会建议大家为不同的平台生成不同的应用程序包。如现在有个应用程序需要分别发布到32位与64位两种平台上,此时最好生成两个MSI包,分别用于32位计算机与64位计算机平台上。如此的话,可以避免因为混合代码而造成的稳定性与性能方面的一些负面影响。
二是需要注意有些MSI包可能对64位平台不怎么友好。虽然说Windows Installer技术在大部分情况下都能够支持64位的计算机平台,但是在某些特殊的情况下,其生成的 MSI包可能会跟64位的计算机平台产生冲突。如在安装过程中会发生错误,或者说安装完成后无法正常启动。此时需要注意,要在部署的时候添加一个额外的启动条件。对于MSI包还有一点也需要引起开发人员的重视,即在Visusal Studio中的简化版本中不能够创建64位的MSI包。最后对于MSI包还需要注意兼容性的问题。64 位MSI包可以支持32位和64位DLL或EXE以执行自定义操作;但是32位MSI包无法支持64 位DLL或EXE以执行自定义操作。这句话程序人员最好能够刻在心里,免得多走冤枉路。
总的来说,Visual Studio对于64位平台的支持性还是比较高的。只要采用其自带的应用程序部署方法在大部分情况下都可以正常的生成支持64位计算机平台的应用软件。不过如果使用第三方的部署方法则无法保证Visual Studio应用程序与64位平台的兼容性。故笔者建议,大家还是采用自带的部署方案为好。毕竟其已经可以满足企业大部分的需求,而且是免费的。企业完全没有必要舍近求远。