【IT168 专稿】利用Office 产品内置的功能和对某些特性的自定义,可以满足一些企业的特殊应用,开发人员用自己的智慧为微软的Office赋予了新的价值。但是,由于这种使用方式并不为微软所推荐,因此在通过服务器端代码(例如,Active Server Pages (ASP)、DCOM 或 NT Service)进行Office“自动化”过程中往往产生某些不可预知的问题

 
  本文针对这些问题,提供可以提高Office应用性能的“自动化”备选方案,并提出进行服务器端“自动化”的配置方法。
 
配置Office服务器的五大常见问题
 
  在使用服务器端Office 自动化解决方案的时候应当了解到,Office的表现会因为环境的不同而表现出主要的五大问题。
 
  ① 用户身份
 
  Office 应用程序在由“自动化”启动运行时会假定存在一个用户身份。它们根据用户注册表配置单元中的设置为启动应用程序的用户初始化工具栏、菜单、选项、打印机和一些加载项。许多服务会在没有用户配置文件的帐户下运行,因此,Office 可能无法在启动时进行正确的初始化,进而返回一个有关“CreateObject”或“CoCreateInstance”的错误。即使能够在没有用户配置文件的情况下启动Office 应用程序,其他功能也可能无法正常工作。
 
  ② 与桌面的交互性
 
  Office 应用程序在某个交互式桌面下运行时,可能需要让用户看到它们以便某些“自动化”功能正常运行。如果需要一个未指定的参数才能完成某项功能,Office 会用一个模式对话框提示用户,询问用户要进行什么操作。非交互式桌面上的模式对话框是无法取消的,这将导致该线程无限期地停止响应。
 
  ③ 重入和可伸缩性
 
  服务器端组件需要具有较高可重入性的多线程 COM 组件,这些组件在有多个客户端时消耗资源最少而吞吐量却比较高。而Office 应用程序在几乎所有方面都恰恰与其相反,它们是非重入的“自动化”服务器,在为客户端提供多种多样功能的同时也占用了较多的系统资源。作为服务器端解决方案,他们可能会因此而受到实际并发运行数量的限制,并且在多客户端环境中,还可能导致资源争用。
 
  ④ 复原性和稳定性
 
  Office 2000、Office XP 和 Office 2003 使用 Microsoft Windows 安装程序 (MSI) 技术,以使最终用户在进行安装和自行修复时更加容易。MSI 推出了“首次使用时安装”的概念,允许在运行时动态安装或配置功能。在服务器端环境中,这会既降低性能,又增加出现要求用户同意安装或提供相应安装盘的对话框的可能性。此外,在服务器端运行时,由于微软并没有为这样的使用而进行设计和测试,因此Office 的稳定性通常无法得到保障。在网络服务器上使用 Office 作为服务组件可能会降低这台计算机的稳定性,进而降低网络的整体稳定性。
 
  ⑤ 服务器端安全性
 
  由于Office 应用程序不是为在服务器端使用而准备的,因此系统不可能考虑到分布式组件所面临的安全性问题。Office 不对传入的请求进行身份验证,也不会抵制来自宏代码的损害。
 
除此之外,我们在进行服务器端自动化时可能会遇到下列常见技术性错误:
 
  ① “CreateObject/CoCreateInstance”返回以下运行时错误消息,而且无法启动进行自动化。这是因为服务器端代码在没有用户配置文件的情况下运行,或者为启动上下文指定的用户身份没有正确的 DCOM 权限。
 
  在 Microsoft Visual Basic (VB) 或 ASP 中:
   • 消息 1: Run-time error '429': ActiveX component cannot create object
   • 消息 2: Run-time error '70': Permission denied 
  在 Microsoft Visual C 或 Visual C++ 中:
   • 消息 1: CO_E_SERVER_EXEC_FAILURE (0x80080005): Server execution failed
   • 消息 2: E_ACCESSDENIED (0x80070005): Access denied 
 
  ② 打开 Office 文档会导致下列错误,通常,出现这种情况是由于无法初始化 VBA,而无法初始化的原因是权限不足或缺少 VBA 组件注册,当用户从没有用户配置文件的帐户中运行代码并且用户标记不包含“交互式 SID”时,这两种原因都很常见。
 
  • 消息 1: Run-time error '5981' (0x800A175D): Could not open macro storage
  • 消息 2: Run-time error '1004': Method '~' of object '~' failed
 
  ③ “CreateObject/CoCreateInstance”挂起并无法完成,或者需要很长时间才能返回。在有些服务器上,创建很快完成,但 Windows (NT) 事件日志中出现 1004 错误。
 
  ④ 运行多个请求或压力测试可能导致在创建或终止 Office 应用程序时代码失败、挂起或崩溃。一旦出现这种情况,进程会在内存中保持运行状态且无法终止,或者正在自动化的应用程序的所有实例都从该点开始失败。
 
  除了以上提出的这些问题和消息之外,仍然可能出现其它意想不到的问题和系统消息提示,开发人员可以将 Office 的操作环境配置为模拟客户端状态,或者从任何服务器端代码中删除 Office 应用程序并改为使用更稳定的组件(或客户端“自动化”)来解决这些问题。