您对迁移项目中应用程序兼容性部分考虑的周密程度决定了 OS 的推出顺利与否,或者决定了您是否会将您的IT团队置于帮助台电话的围攻、人后的指指点点和无数深夜加班的困境中。
几年前,当公司开始评估 Windows Vista 系统时,应用程序的兼容性成为了前进道路上的致命障碍。这些情形的出现多数是因为公司关键业务功能赖以生存的应用程序在 Windows Vista 下不可用。另外的一些情形是,公司没有预算也没有意愿购买专门为 Windows Vista 设计的新版本的许可。还有一些情形是,关键的应用程序是自定义的或由公司内部人员开发的,最初的开发人员要么已经不在公司了,要么(即便在)不能对基础代码进行再改造。
如今,在考虑向 Windows 7 迁移时,您会发现情况已经远不像几年前那样具有挑战性了 —— —— 专为 Windows Vista 设计的大多数应用程序在 Windows 7 下也可以工作得很好,并且大多数 ISV 也已经对其应用程序进行了更新,以便能与新一代 Windows 操作系统很好地协作。所以不论您是从 Windows XP 还是从 Windows Vista 迁移, 情况都不如过去那么困难了。
即便如此,为 OS 迁移顺利部署应用程序组合仍然是一项浩大的工程,不过,若能采取正确顺序执行操作步骤,并进行一些有助于缩小测试范围的艰难选择,还是可以让这件繁琐的工作不那么令人怯步。
应用程序为何会在 Windows Vista 和 Windows 7 中失效?
那么,Windows 7(及 Windows Vista)中究竟做了什么更改,以至于专为 Windows XP 设计的应用程序“失效”?有一点可以确定,即负责 Windows Vista 和 Windows 7 的工程团队绝没有轻率地对待这个问题。
对 Windows 进行更改是为了提高安全性、可靠性、性能以及可用性,在某些情况下,还能删除已经达到其有效使用期的旧组件。我们无意在本文中花费时间来罗列所有这些更改,但会给出对应用程序兼容性意义重大的一些更改,包括:
用户帐户控制 (UAC)/标准用户帐户。在 Windows Vista 的开发中,工程团队使大多数组织能够将其用户部署为标准用户,而将管理员权限仅保留给需要这种权限的用户——IT 专业人员。对客户PC采用这种我们习惯称之为“权限最低的用户帐户”的策略,可以帮助阻止恶意软件的入侵、减少终端用户的配置错误以及防止未经授权的应用程序加载。在过去,应用程序具有编写注册表设置、修改内核以及进行其他类似攻击动作的能力。不幸的是,这样的自由是要付出代价的——牺牲了安全性。Windows 现在限制了应用程序所能更改的 OS 参数,限制恶意软件所能造成的影响,但是,需要对通过这种行为编写的应用程序进行修改或做填充处理,然后它们才能在 Windows 7 中正常工作。
顺利部署 Windows 7 应用程序的五个步骤
如同大多数浩大的工程一样,若能花些时间来将问题分解为符合逻辑的可管理的若干任务,困难并不是不可战胜的。
应用程序的顺利部署可分为三个最主要的部分:收集、分析和缓解。但是还有其他几个我们想要强调的步骤:在开启测试体制之前,请考虑使用虚拟化技术来帮助缩减测试过程,并潜在地帮助改善桌面的基础结构,使未来的迁移更好管理;根据展开策略对测试阶段进行排序。
做好深入研究的准备后,即可立即开始行动了。
步骤 1:收集应用程序清单
第一个步骤是通过应用程序清单了解自己的处境——请相信我们;此时,您可能刚刚意识到问题比您想象的要复杂。不过,重要的是,您刚刚将一个“未知”转变为“已知”,从更好的角度审视了测试范围和准备就绪的程序,并了解了未来的挑战。
幸运的是,目前已经有一些工具可用来帮助自动化这个过程。您的客户管理软件可能已经内置了这项功能,或者您也可以使用可免费下载的Application Compatibility Toolkit.如果您已经有了其他的清单机制,比如System Center Configuration Manager、Asset Inventory Service 等,那么您可以将它们作为起点。
要让清单成为最有用的下游产品,请捕获比应用程序列表更多的信息——比如您可以了解有关应用程序的当前用户、这些用户的角色以及该应用程序对用户的重要程度等更多细节。有了这些信息,您就可以优先对待那些至关重要的应用程序,并消除未使用的或多余的应用程序(下一步骤将对此进行更消息的详述)。
而且,这还会提供额外的好处——可标识出目前尚未管理却已广泛使用的应用程序。您可能要将这些应用程序也纳入正规,这样就可以确保它们在获准的版本上得到恰当管理,并且所需的软件也会得到更新。
步骤 2:分析应用程序
有多少您目前支持的应用程序已经被替换,或者已经失去了业务用户的喜爱。如果您与大多数组织无异的话,相当数量的受支持应用程序(很多情况下是大多数应用程序)都处于这样的状态。所以,一旦完成了评估,并且有了很多信息作为基础,那么在开始进行耗时(且昂贵的)回归测试过程之前,下一个步骤就是清理受支持应用程序的列表,并对这些应用程序进行过滤。
为您的应用程序组合设置适当的目标。总共有多少应用程序需要受到支持?一个应用程序在哪种情况下需要升级到“托管”状态?
设置了目标后,就可以开始寻找最容易实现的目标,并缩小需要测试的应用程序的范围。
消除多余且未使用应用程序。毫无疑问,您会发现自己有几个应用程序执行的是相同的功能。现在需要确立一个应用程序完成一种功能的标准,并消除那些废弃不用的应用程序。这里有一个提示,建议您尝试并映射应用程序依赖关系,因为您可能需要支持一个旧版的应用程序,使另一个应用程序能够受此 ISV 支持。那些很少或从未使用的应用程序自然应该抛弃。这么做不仅可以简化测试,还可以节省购买软件许可的支出。
删除同一应用程序的多个版本并保留最新的版本。几乎在所有情况下,最新版本的性能都是最好的并且也最安全和可靠。同样,请注意应用程序之间的依赖关系。
从业务用户那里收集信息,帮助优先化至关重要的应用程序,并判断哪些部门在使用哪些应用程序。在对测试过程进行排序时,这非常有用;您需要根据分阶段推出的新桌面映像来调整测试时间。
步骤 3:评估非兼容性和减少选项
毋庸置疑,有一些应用程序需要多做一些工作才能使 Windows 7 顺利部署。目前,有如下几个选项可供参考:
您可以用应用程序的一个新版本替换不兼容的版本。这种方法最可靠,但不幸的是,也是最昂贵的一种方法。如果应用程序是至关重要的,或对业务的运营有战略性意义,那么建议采用这种方式。
为现有应用程序创建填充码。填充码是插入到应用程序和 Windows 间的一些小代码块,用来修改对底层 OS 的调用——比如,让应用程序相信用户是以管理员身份运行的,而同时又维持标准用户模式。这可能会为您带来一些管理负担,因为您需要维护一个填充码数据库,但这种方法能够解决很多应用程序问题。这种方式是最为经济有效的,而且如果应用程序提供商已经不在左右,那么这可能是唯一的选择。但是有一点需要警告——很多提供商不支持做过填充码处理的应用程序。
您可以使用组策略来更改应用程序的冒犯行为。与填充码一样,这种方式通常能够解决兼容性问题,但同样有一些缺点。从本质上讲,这种方式可以使用策略来禁用可能导致应用程序放缓的某个特性或功能。不幸的是,很多情况下,这些功能会涉及底层系统的安全性,所以代价是很明显的。同样地,应用程序必须拥有组策略设置才能启用这种管理性。
对于自定义或是内部开放的应用程序,您当然可以修改代码。但这并不总能奏效,如果奏效,那么有很多资源可提供帮助——Application Compatibility Cookbook 中提供了从 Windows XP 到 Windows Vista 所做的变化,Application Quality Cookbook 中提供了从 Windows Vista 到 Windows 7所做的变化。这两个资源都是免费的指南,可以帮助开发人员为获得本地兼容性而重新编码应用程序。
步骤 4:为 OS 部署和新应用程序交付选项做准备
开始 OS 迁移项目的时候,同时也是您重新思考如何将应用程序打包并交付给终端用户的绝佳时间。虚拟化技术已经为我们提供了许多选择和可能,而这些选择在上一次主要OS 迁移时还不可用;在开始测试过程之前,应该考虑为桌面映像和应用程序交付提供不同的模型。您会发现,应用程序测试和准备工作所带来的节省不仅能够弥补虚拟环境的实现成本,还能为未来的开发提供了更灵活、更易于管理的环境。
主要有两种形式的虚拟化可以解决应用程序兼容性问题——应用程序虚拟化和 OS 虚拟化。应用程序虚拟化将应用程序层从 OS 分离出来,仅包含应用程序文件和注册表设置,并将应用程序打包,以简化它们。OS 虚拟化则有几种不同的形式,但基本上都会创建一个独立于机器上的本地映像的 OS 映像。
对应用程序组合进行虚拟化在可管理性和灵活性方面带来了若干好处,但最为关键的一个优势是可以最小化应用程序之间的冲突。当您需要同时运行同一个应用程序的两个版本时,就会出现这类冲突——这在软件培训场景很常见,比如某个特定任务在新旧应用程序中的完成过程的对比,又比如财务部门正在迁移到财务软件的新版本,但又需要用旧版本的软件关闭本财年的帐务。
虚拟化在应对应用程序兼容性问题方面的一个更常见的使用是创建一个虚拟映像,该映像包含关键应用程序以及专为运行此应用程序而设计的操作系统。有一些启用 OS 虚拟化的工具:从Windows 7 专业版的虚拟 PC 和 Windows XP 模式以及更高级的 SKU(一个未托管的虚拟映像,能运行为 Windows XP 设计、无法兼容 Windows 7 的应用程序),到 MicrosoftDesktop Optimization Pack (MDOP) 中的 Microsoft Enterprise Desktop Virtualization (MED-V),它通过策略决定物理和虚拟环境的交互方式,从而使虚拟机的供应、配置和管理变得很轻松。
当然,为您的客户 PC 采用一种替代的计算模型本身是一项巨大的工程,但值得花费一些时间来评估这为组织带来的好处——更大的灵活性和更高的可管理性——是否远超出了因采取这种 PC 供应模型而付出的额外代价。
步骤 5:对测试、实验和部署进行排序
按步骤2中提及的优先级对您的测试过程进行排序,以便可以开始分阶段地展开测试,而且可以并行进行后续测试。
开始测试过程时,可以使用两种方法——静态和动态分析;由于静态分析相对较新,更周密的测试方法是将这二者结合使用。
静态分析着眼于应用程序的结构,并确定在安装时或运行时必定会出现的问题。目前,已经有很多工具和服务可用来帮助自动化这一过程,并且可以迅速突出明显的问题。
动态分析着眼于应用程序在运行时的行为,通常都是在回归测试中完成的。在这里,将在特定的环境对应用程序进行“烟雾测试”——复制各种用户对其硬件以及其他关键应用程序和驱动程序的体验。
最后,需要让一些真正的用户运行这些应用程序,并观察是否会出现在结构化测试时没有出现过的任何异常行。这时,只要参与即可获得新 PC 的许诺是一个很好的激励措施。
您准备好开始进入生产时,先要标示出迁移对之很有意义的那些人——基于他们所需的特定功能或是为了最大程度地减少对业务造成的破坏。与处理看着不熟悉的屏幕不知所措的任务工作人员打来的求助电话相比,迁移一组专业用户要简单得多。接下来,要确定这些用户组执行其作业需要哪些应用程序。先从受应用程序兼容性影响最小或未受影响的组(基于其使用的应用程序)开始,这会让您对部署过程和操作系统进行验证。随着您对应用程序套件的处理,将更多的组从不兼容的应用程序类别中解放出来,以后就可以将这些组为目标。
最后一句警告——避免将这个过程进行得太过。如果您将操作范围从应用程序兼容性扩展到整个应用程序质量项目,那么您可能会永远无法完成此任务。接受修复 bug 让工作无法完成的事实,同时避免试图消除每个现有的 bug——您的时间无疑有更好的用处。