OpenOffice uno.util.Bootstrap.bootstrap() 挂起并且不返回
Posted
技术标签:
【中文标题】OpenOffice uno.util.Bootstrap.bootstrap() 挂起并且不返回【英文标题】:OpenOffice uno.util.Bootstrap.bootstrap() hangs and does not return 【发布时间】:2013-03-13 14:46:46 【问题描述】:Windows Server 2003 - IIS 6.0
我有一个 Asp.Net 4.0 (C#) Web 应用程序,它使用 OpenOffice 将 Microsoft Office 文档转换为 PDF,以便它们可以显示在 Web 上。
一切正常。
然后我在 Web 服务器上将 OpenOffice 从 3.2.1 升级到 3.4.1,但现在它不起作用。 问题发生在引导调用上。
private static XComponentLoader LoadOO()
XComponentContext OO = uno.util.Bootstrap.bootstrap(); // this will either start OOo or Find one that's running. (The code hangs here)
XMultiServiceFactory oServMan = (XMultiServiceFactory)OO.getServiceManager(); // Get Service Manager
XComponentLoader aLoader = (XComponentLoader)oServMan.createInstance("com.sun.star.frame.Desktop"); // Get a CompontLoader
return aLoader;
uno.util.Bootstrap.bootstrap();挂起并且不返回任何内容。
调用确实会在网络服务用户名下启动 OpenOffice,但调用永远不会返回。每次调用该方法时,它都会打开另一个 OpenOffice 实例,而不是附加到已经打开的实例。
我已经尝试再次降级到 3.2.1,但同样的事情发生了。
我尝试了here 概述的解决方案 3,但没有成功。
我尝试重新启动 IIS 并回收应用程序池以及与用户权限有关的各种事情。我无处可去,需要一些帮助。
我不是最初让这个在网络服务器上工作的人,所以不知道是否采取了任何特殊步骤。让它在我的开发机器上运行任何版本的 OpenOffice 都没有问题。
【问题讨论】:
您解决了这个问题吗?我有同样的错误。如果我解决它会发布。 您解决了这个问题吗?我遇到了同样的问题。它适用于我在 dev 上是 express 但只是等待这个调用并崩溃 iis 我将 myu APP 池更改为我登录时使用的实际用户。它有效。 我确实让它工作了,但我不记得我到底做了什么。我确实知道问题是 OpenOffice 挂在一个“不可见”的初始注册屏幕上,并且在注册过程完成之前它不会进行。我相信答案是以不“隐藏”的方式以预期用户身份运行 OpenOffice,这样您就可以在初始加载时完成注册过程。完成后,OpenOffice 将正常启动。抱歉,我无法提供更多帮助。 【参考方案1】:我知道使用 LocalSystem 作为您的应用程序池标识将解决该问题。
我知道这并不理想,在您的情况下甚至可能是不允许的。因此,您还可以尝试修改 ASPNET 用户或自定义本地或域用户的本地策略。用户当然需要对 ooo 可执行文件夹的读取/执行权限,也许还需要临时权限。
在 Vista/Server 2008 及更高版本上,如果没有本地管理员或本地系统,我无法让它工作。我认为这与对 PROCESS_QUERY_INFORMATION 权限的更改有关,因为“.Bootstrap()”调用希望附加到您刚刚创建的 OO 进程。如果您运行较旧,可以尝试以下方法:
运行 secpol.msc 或管理工具/本地安全策略, 在本地政策/用户权限分配中:
找到“拒绝本地登录”和“拒绝通过终端登录”(如果 存在,可能因 win 版本而异) 从该列表中删除 ASPNET 或 your user 用户(如果存在)。 然后找到“允许本地登录”并将您的用户添加到此列表中。http://support.microsoft.com/default.aspx?scid=kb;en-us;317012 http://support.microsoft.com/kb/555134
应用程序池也必须启用 32 位,但我相信如果您已经做到了这一点,那么您已经具备了该设置。
【讨论】:
以上是关于OpenOffice uno.util.Bootstrap.bootstrap() 挂起并且不返回的主要内容,如果未能解决你的问题,请参考以下文章
OpenOffice Basic 宏与 openoffice API