服务器端 Office 自动化注意事项.docx

上传人:b****9 文档编号:25697163 上传时间:2023-06-11 格式:DOCX 页数:8 大小:23.57KB
下载 相关 举报
服务器端 Office 自动化注意事项.docx_第1页
第1页 / 共8页
服务器端 Office 自动化注意事项.docx_第2页
第2页 / 共8页
服务器端 Office 自动化注意事项.docx_第3页
第3页 / 共8页
服务器端 Office 自动化注意事项.docx_第4页
第4页 / 共8页
服务器端 Office 自动化注意事项.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

服务器端 Office 自动化注意事项.docx

《服务器端 Office 自动化注意事项.docx》由会员分享,可在线阅读,更多相关《服务器端 Office 自动化注意事项.docx(8页珍藏版)》请在冰豆网上搜索。

服务器端 Office 自动化注意事项.docx

服务器端Office自动化注意事项

服务器端Office自动化注意事项

本文内容概要更多信息使用服务器端Office自动化时出现的问题运行服务器端时使用自动化的备选方案配置Office在服务器端运行参考属性概要开发人员可以使用“MicrosoftOffice自动化”来构建利用Office产品内置的功能和特性的自定义解决方案。

虽然这样的编程开发可以在客户端系统上相对容易地实现,可是,如果要通过服务器端代码(例如,ActiveServerPages(ASP)、DCOM或NTService)进行“自动化”,就会发生许多复杂情况。

本文讨论开发人员可能会面对的这些复杂情况,提供可以提高性能的“自动化”备选方案,并提出在必须要进行服务器端“自动化”的情况下配置Office的方法。

不过,开发人员应该知道,下面提供的建议仅供参考。

Microsoft建议不要进行服务器端“Office自动化”,也不为此提供支持。

注意:

在此上下文中,“服务器端”一词也适用于在MicrosoftWindowsNT或MicrosoftWindows2000工作站上运行的代码,前提是该代码从所登录用户的交互式站以外的WinStation运行。

例如,由SYSTEM帐户下的“任务计划程序”启动的代码运行的环境与“服务器端”ASP或DCOM代码运行的环境是相同的,因此会遇到许多相同的问题。

有关WinStations和COM的更多信息,请参见“更多信息”和“参考”这两部分。

回到顶端|提供反馈更多信息MicrosoftOffice所有当前版本的设计、测试和配置都是为在客户端工作站上作为最终用户产品运行而完成的。

它们假定存在一个交互式桌面和用户配置文件,而且不提供满足为以无人参与方式运行而设计的服务器端组件的需要所必需的重入或安全性级别。

Microsoft目前建议不要从任何无人参与的、非交互式客户端应用程序或组件(包括ASP、DCOM和NTService)中进行MicrosoftOffice应用程序的“自动化”,也不为此提供支持,因为Office在这种环境中运行时可能会出现不稳定的现象并且/或者会死锁。

如果您要构建在服务器端上下文中运行的解决方案,应尽可能尝试使用对于以无人参与方式执行很安全的组件,或找到至少允许一部分代码在客户端运行的备选方案。

如果您选择从服务器端解决方案中运行Office应用程序,将发现这样会缺少成功运行所必需的许多功能,而且整体解决方案的稳定性会有风险。

使用服务器端Office自动化时出现的问题尝试在服务器端解决方案中使用Office的开发人员需要了解Office的表现因环境而与预期不同的五个主要问题。

要成功运行您的代码,就需要解决这些问题,而且需要尽可能减少它们的影响。

您在构建应用程序时,要仔细考虑这些问题,因为没有任何一种解决方案能解决所有这些问题,不同的设计要求您优先考虑不同的元素。

用户身份:

Office应用程序在运行时会假定存在一个用户身份,即使在它们由“自动化”启动时也是如此。

它们尝试根据用户注册表配置单元中的设置为启动应用程序的用户初始化工具栏、菜单、选项、打印机和一些加载项。

许多服务会在没有用户配置文件的帐户(例如,SYSTEM或IWAM_[servername]帐户)下运行,因此,Office可能无法在启动时进行正确的初始化,进而返回一个有关“CreateObject”或“CoCreateInstance”的错误。

即使能够在没有用户配置文件的情况下启动Office应用程序,其他功能也可能无法正常工作。

如果您计划从某个服务进行“Office自动化”,需要配置您的代码或Office,以便它使用某个已加载的用户配置文件来运行。

与桌面的交互性:

Office应用程序假定它们在某个交互式桌面下运行,在有些情况下,可能需要让用户看到它们以便某些“自动化”功能正常运行。

如果发生意外错误,或者需要一个未指定的参数才能完成某项功能,根据设计,Office会用一个模式对话框提示用户,询问用户要进行什么操作。

非交互式桌面上的模式对话框是无法取消的,这就导致该线程无限期地停止响应(挂起)。

虽然有些代码编写的经验做法有助于减少发生这种情况的可能性,但还是无法做到完全防止。

正是这种情况使得从服务器端环境运行Office应用程序带有风险,而且不受支持。

重入和可伸缩性:

服务器端组件需要是具有较高可重入性的多线程COM组件,这些组件在有多个客户端时开销最少而吞吐量较高。

Office应用程序在几乎所有方面都正好相反。

它们是非重入的、基于STA的“自动化”服务器,是为给一个客户端提供多种多样但占用资源较多的功能而设计的。

它们作为服务器端解决方案提供不了多少可伸缩性,而且对于重要元素有固定的限制,例如,对于内存,无法通过配置进行更改。

更重要的是,它们要使用全局性资源(例如,映射到内存的文件、全局加载项或模板,以及共享的“自动化”服务器),这样可能会限制能够并发运行的实例的数量,而且,如果它们是在多客户端环境中配置的,还可能导致争用的情况。

开发人员如果计划同时运行多个任意“Office应用程序”的实例,就需要考虑“后台处理”或序列化对“Office应用程序”的访问,以避免可能出现的死锁或数据损坏。

复原性和稳定性:

Office2000、OfficeXP和Office2003使用MicrosoftWindows安装程序(MSI)技术,以使最终用户在进行安装和自行修复时更加容易。

MSI推出了“首次使用时安装”的概念,允许在运行时动态安装或配置功能(针对系统,或者更多地针对特定用户)。

在服务器端环境中,这会既降低性能,又增加出现要求用户同意安装或提供相应安装盘的对话框的可能性。

虽然此设计旨在增强Office作为最终用户产品的复原性,但Office实现MSI功能在服务器端环境中还是会对生产力带来不利影响。

此外,在服务器端运行时,Office的稳定性通常无法得到保障,因为它尚未为这样使用而进行设计或测试。

在网络服务器上使用Office作为服务组件可能会降低这台计算机的稳定性,进而降低您的网络作为一个整体的稳定性。

如果您计划在服务器端自动运行Office,请尝试将该程序隔离到一台专用计算机上,该计算机不能影响重要功能,而且在需要时可以重新启动。

服务器端安全性:

Office应用程序从来都不是为在服务器端使用而准备的,因此,请不要考虑分布式组件所面临的安全性问题。

Office不对传入的请求进行身份验证,而且不会保护您免受无意中从服务器端代码中运行宏或启动另一台可能会运行宏的服务器的损害。

不要打开从匿名网站上载到服务器上的文件!

基于上一次设置的安全性设置,服务器可能会在具有全部特权的Administrator或System上下文下运行宏,并危及您的网络的安全!

另外,Office使用很多客户端组件(例如,SimpleMAPI、WinInet、MSDAIPP),它们会缓存客户端身份验证信息以加快处理速度。

如果在服务器端进行Office自动化,则一个实例可能为多个客户端提供服务,而且由于已经为该会话缓存了身份验证信息,就有可能出现这样的情况:

一个客户端可以使用另一个客户端的缓存凭据,从而通过模拟其他用户获得未经授予的访问权限。

除了要考虑技术问题以外,您还必须考虑这样一种设计在许可方面的可行性。

目前的许可原则禁止在服务器上使用“Office应用程序”为客户端请求提供服务,除非那些客户端自己具有Office的许可副本。

《最终用户许可协议》(EULA)没有涉及使用服务器端“自动化”向未经许可的工作站提供Office功能的情况。

除了这些比较大的问题以外,许多客户还发现在不修改其Office默认安装的情况下,尝试进行服务器端自动化时可能会遇到下列常见错误之一:

“CreateObject/CoCreateInstance”返回以下运行时错误消息之一,而且无法启动进行自动化。

在MicrosoftVisualBasic(VB)或ASP中:

消息1Run-timeerror'429':

ActiveXcomponentcannotcreateobject消息2Run-timeerror'70':

Permissiondenied在MicrosoftVisualC或VisualC++中:

消息1CO_E_SERVER_EXEC_FAILURE(0x80080005):

Serverexecutionfailed消息2E_ACCESSDENIED(0x80070005):

Accessdenied出现这些错误是因为服务器端代码在没有用户配置文件的情况下运行,或者为启动上下文指定的用户身份没有正确的DCOM权限。

打开Office文档会导致下列错误之一:

消息1Run-timeerror'5981'(0x800A175D):

Couldnotopenmacrostorage消息2Run-timeerror'1004':

Method'~'ofobject'~'failed通常,出现这种情况是由于无法初始化VBA,而无法初始化的原因是权限不足或缺少VBA组件注册,当用户从没有用户配置文件的帐户中运行代码(问题1)并且用户标记不包含“交互式SID”(问题2)时,这两种原因都很常见。

“CreateObject/CoCreateInstance”挂起并无法完成,或者需要很长时间才能返回。

在有些服务器上,创建很快完成,但Windows(NT)事件日志中出现1004错误。

问题通常是出现一个运行服务器端代码的非交互式桌面的模式对话框(问题2)。

如果出现该对话框的原因是某个MSI组件安装有问题(丢失注册表项或文件映像损坏),它会在找不到安装点时提示需要安装CD,然后执行一个或多个组件的重新安装(问题4)。

某些功能会意外失败或无限期挂起。

在非交互的情况下(问题2),某些资源(例如打印机、映射的驱动器、OLE嵌入对象和剪贴板)可能变得无法使用,或者它们的状态可能变得不确定。

同样,如果没有用户配置文件(问题1),则网络资源无法使用,而且权限最小。

运行多个请求或压力测试可能导致在创建或终止Office应用程序时代码失败、挂起或崩溃。

一旦出现这种情况,进程会在内存中保持运行状态且无法终止,或者正在自动化的应用程序的所有实例都从该点开始失败。

由于Office应用程序要共享全局性资源(问题3),所以需要针对特定的操作(包括启动、关机、打印、导出和OLE链接更新(包括任何DDE通知)这样的事件)序列化对某个Office应用程序的访问。

除了此处列出的问题或消息之外,还可能出现一些其他问题和消息,但它们通常作为前面列出的五个问题的结果出现。

为了解决这几种错误,开发人员应该将Office的操作环境配置为模拟客户端状态,或者从任何服务器端代码中删除Office应用程序并改为使用更稳定的组件(或客户端“自动化”)。

运行服务器端时使用自动化的备选方案Microsoft极力建议开发人员在需要开发服务器端解决方案时寻找“Office自动化”的备选方案。

由于Office设计上的局限性,更改Office配置不足以解决所有的问题。

Microsoft提供了很多备选方案建议,这些方案不需要在服务器端安装Office,而且可以比“自动化”更高效、更迅速地执行大多数常规任务。

在将Office作为您的项目中的服务器端组件之前,请先考虑备选方案。

大多数服务器端“自动化”任务包括创建文档。

由于Office2000及更高版本支持HTML作为本机文档格式,所以大多数文档可以用HTML格式创建,在需要时还可以使用可扩展标记语言(XML)标记,而且还可以通过使用多用途Internet邮件扩展(MIME)类型将数据流传输到客户端,以便在Office中显示最终文本。

文档可以被编辑和保存,甚至在需要时通过在服务器上使用ASP即可将文档返回到服务器。

对于Office的早期版本,使用其他便于操作的文本格式(例如RTF)可以实现同样的效果。

有些本机二进制格式可以通过使用OfficeWeb组件(OWC)或ActiveX数据对象(ADO)来编辑,速度更快,稳定性也更高。

不进行“自动化”也可以查看或更改文档属性,通过使用FrontPageServerExtensions(FPSE)或分布式创作及版本控制(DAV),可以进行文件管理和版本控制。

如果必须要进行“自动化”,可以将大多数任务卸载到客户端,这样系统的稳定性和可伸缩性都会更高,因为每个用户都在自己的上下文中用自己的设置运行任务。

有关这些主题中的任意一个以及说明如何实现它们的示例的更多信息,请单击下面的文章编号,以查看Microsoft知识库中相应的文章:

270906如何使用ASP生成RTF文档以将数据流传送到MicrosoftWord198703如何从客户端VBScript自动化Excel199841如何在IE中使用Excel以MIME类型显示ASP结果224351使用Dsofile.dll可以在VisualBasic.NET2003和VisualBasic.NET2002中没有Office的情况下编辑Office文档属性244049如何使用服务器端的制作图表功能来动态生成图表258187OWebComp.exe包含用于Office2000Web组件的脚本示例260239如何在使用ActiveServerPages页创建Excel文件时设置单元格数据的格式278973ExcelADO演示如何在Excel工作簿中使用ADO来读写数据286023如何从InternetExplorer中将VBActiveX组件用于Word自动化288130如何使用ASP构建在客户端显示的XML电子表格317316OfficeWeb组件在服务器端使用时的限制如果您的业务需要在服务器端创建二进制Office文件,有些第三方供应商提供的组件可对您有所帮助。

下面的列表列出了提供此类服务的某些著名供应商。

此列表仅作为参考。

列表的内容并不完整。

其他供应商可能会提供更适于您的类似服务。

您应当调查所有可能的第三方解决方案,以选择最能满足您的业务需要的供应商。

目前,以下供应商提供了一些解决方案,这些方案允许以编程方式创建和编辑本机Office文件格式。

有关这些第三方供应商的更多信息,请访问下面的网站:

AiaSoftwareB.V.http:

//www.aia-PolarSoftArtisansSyncFusionKeylogix注意本文中提到的第三方产品由Microsoft以外的其他公司提供。

对于这些产品的性能或可靠性,Microsoft不作任何暗示保证或其他形式的保证。

配置Office在服务器端运行如果没有其他可行的解决方案,并且您决定继续在服务器端进行“Office自动化”,您需要解决前面列出的许多问题才能在这种环境中成功运行。

由于大多数问题都是与配置相关的,所以无法给出一套让“Office自动化”在所有系统的所有情况下都能在服务器端正常运行的步骤。

有些配置设置可能会与其他选项冲突,每种方法都各有利弊。

您可能需要不断试验,才会找到最适用于您的环境的方案。

要从服务器端代码中进行“Office自动化”,一般需要完成以下任务:

设计您的项目以隔离和封装Office。

为项目编写代码时要预见到问题并寻求能够动态更正这些问题的方法。

为项目提供一个供Office使用的特定用户身份和配置文件。

您的项目设计方案要考虑到在尝试使用“Office自动化”时服务器端安全性和Office非重入性方面的问题。

将对Office的使用限制到某个特定实例,由一个序列化对象(mutex或自定义的锁定基元)来控制这个实例,或者,利用能够在需要时发出应用程序对象的自定义对象处理程序(或中间装置)来“后台处理”一组控制紧密的实例,但要控制那些需要序列化的方面。

Office假定存在一定数量的状态,所以多个同时执行某些操作(例如,启动、关机、打印,等等)的客户端会导致冲突,而且可能锁死一个或多个调用线程,其现象是:

显示一条错误,提示用户参考更多信息,或者拒绝释放所有实例占用的全局性资源。

因此,首先要限制服务器端设计中对“Office自动化”的使用,并且将进程隔离到一台在需要时可以重新启动的不太重要的计算机上。

还要隔离调用上下文,这样,挂起的调用客户端就不会降低必不可少的系统服务的性能。

例如,不要使用系统线程直接从IIS中进行自动化操作,而是要将代码隔离到在它自己的线程上运行,这样,即使它失败,一般也不会影响IIS功能。

另外,还要考虑您的设计如何实施安全性和身份验证。

由于Office不实施服务器端安全性,所以您的代码需要确保只有“受信任”的代码模块(例如,ASP页、脚本文件,等等)才能创建Office应用程序的“自动化”实例并调用其方法,还要确保所有文档在您让Office打开它们之前都是安全的。

服务器上的Office应用程序应该无论何时都以“高”安全性运行。

如果您的设计不实施安全性,您的服务器就会面临风险!

一旦设计方案就位,您就应该编写防御性代码,以尝试预防问题发生,并在问题发生时处理错误。

您的代码一定要传递可选参数的值,因为缺少的或有冲突的值有时要求Office提示用户参考更多信息。

在所有功能中使用错误陷阱,正确地处理错误条件,并通过使用可以利用一个自定义设置(在注册表或INI文件中)来打开或关闭的日志记录代码来记录这些错误。

如果您执行一项可能导致出现独立于Office显示的错误对话框的操作(例如,打印可能导致打印机驱动程序在打印机缺纸时显示对话框),就要准备处理可能出现的死锁,方法是通过使用超时或第二线程来监控进程。

有关更多信息,请参见下面的Microsoft知识库文章:

259971如何使用VisualBasic关闭Office应用程序显示的对话框使用您的日志记录代码来跟踪问题和调试程序。

如果您使用自定义对象池,可以添加性能测试和可伸缩性测试,以监控使用情况并记录影响所有客户端的问题。

通过一个中央控制程序,您还可以在需要时终止Office的错误实例并随后重新创建它们,以增强总体稳定性。

在程序准备就绪可以部署之后,一定要在服务器上正确配置Office,以便运行合适的用户上下文。

Office需要用户配置文件,并且必须确保它在加载时有一个配置文件才能成功实现自动化。

在服务器端环境中工作时,有三种方法可以做到这一点:

将“自动化”启动的Office应用程序的所有实例都配置为以“交互式”用户的身份运行。

将“自动化”启动的Office应用程序的所有实例都配置为以某个特定用户的身份运行。

通过使用MTS/COM+软件包并允许Office应用程序继承启动该应用程序的用户的身份,将代码配置为以某个特定用户的身份运行。

第一种方法可以使Office同时获得特定桌面的身份和可交互性,它是调试时的最佳选择(因为可以让Office可见,并且能够让本地登录的用户看到和记录任何对话框或GPF错误)。

为了成功运行,这种方法确实会要求交互式用户保持登录状态,所以,它可能不适用于某些情况。

有关更多信息,请参见下面的Microsoft知识库文章:

288366如何将Office应用程序配置为在交互式用户帐户下运行第二种方法会指定一个特定用户,但不允许交互性。

Office会在一个不可见的桌面上的新WinStation中以被指定用户的身份启动。

这种方法需要进行一些其他配置,以确保加载用户注册表配置单元,因为在默认情况下COM/DCOM不会做这一步。

该设置对于系统来说是全局性的,所以它可能会与其他程序冲突。

有关以这种方式配置Office的更多信息,请参见以下Microsoft知识库文章:

288367如何将Office应用程序配置为在特定用户帐户下运行第三种方法允许您为特定网站或代码模块指定一个身份,避免为Office全局性地设置一个固定身份。

只要以前已经为该计算机配置了该身份并且已经加载了注册表配置单元,Office就会以该身份运行并正确加载。

通常,这种方法是最灵活、最可靠的,但是,像前一种方法一样,这种方法也不提供与某个可见桌面的交互性,而且它也需要额外进行一些设置。

有关以这种方式配置Office的更多信息,请参见以下Microsoft知识库文章:

288368如何将Office应用程序配置为从COM+/MTS包自动运行您需要评估上述哪种方法适合您的需要,以及如何才能最好地部署您的解决方案。

此处提供的信息不保证能够解决所有客户端的所有问题。

建议您最好在部署之前彻底地进行测试。

回到顶端|提供反馈参考有关服务器端“自动化”的其他信息,请参见以下Microsoft知识库文章:

169321INFO:

COM服务器激活和NTWindows工作站回到顶端|提供反馈属性文章编号:

257757-最后修改:

2013年7月16日-修订:

12.8这篇文章中的信息适用于:

MicrosoftOfficeAccess2003MicrosoftAccess2002标准版MicrosoftAccess2000标准版MicrosoftAccess97标准版MicrosoftExcel2002标准版MicrosoftExcel2000标准版MicrosoftExcel97标准版MicrosoftOfficeOutlook2003MicrosoftOutlook2002标准版MicrosoftOutlook2000标准版MicrosoftOutlook97标准版MicrosoftOfficePowerPoint2003MicrosoftPowerPoint2002标准版MicrosoftPowerPoint2000标准版MicrosoftPowerPoint97标准版MicrosoftWord2002标准版MicrosoftWord2000标准版MicrosoftWord97标准版MicrosoftOfficeProjectStandard2003MicrosoftOfficeProjectProfessional2003MicrosoftProject2002标准版MicrosoftProject2000标准版MicrosoftProject98标准版MicrosoftOfficeVisioProfessional2003MicrosoftVisio2002简体中文标准版MicrosoftVisio2002简体中文专业版MicrosoftMapPoint2006StandardEditionMicrosoftMapPoint2004StandardEditionMicrosoftMapPoint2002标准版MicrosoftMapPoint2001标准版MicrosoftMapPoint2000标准版MicrosoftOffic

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1