OpenOffice uno.util.Bootstrap.bootstrap()挂起并且不返回

时间:2013-03-13 14:46:47

标签: c# asp.net openoffice.org bootstrapping

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,但同样的事情发生了。

我尝试过解决方案3概述here但没有成功。

我尝试重新启动IIS并回收应用程序池以及与用户权限有关的各种事情。我无处可去,需要一些帮助。

我不是最初在Web服务器上工作的人,所以不知道是否采取了任何特殊步骤。使用任一版本的OpenOffice在开发机器上工作都没有问题。

1 个答案:

答案 0 :(得分:2)

我知道使用LocalSystem作为应用程序池标识可以解决问题。

我知道这不太理想,在您的情况下甚至可能不允许。因此,您还可以尝试修改ASPNET用户或自定义本地或域用户的本地策略。用户当然需要对ooo可执行文件夹的读/执行权限,也许还需要temp。

在Vista / Server 2008及更高版本上,如果没有本地管理员或本地系统,我无法让它工作。我认为它与PROCESS_QUERY_INFORMATION权限的更改有关,因为“.Bootstrap()”调用正在寻找附加到刚刚创建的OO进程。如果您的年龄较大,可以尝试以下操作:

运行secpol.msc或管理工具/本地安全策略, 在本地政策/用户权利分配:

  • 找到“拒绝本地登录”和“拒绝通过终端登录”(如果 目前,在胜利版本上可能会有所不同)
  • 从此列表中移除ASPNET或{您的用户}用户(如果有)。
  • 然后找到“允许本地登录”并将您的用户添加到此列表中。

http://support.microsoft.com/default.aspx?scid=kb;en-us;317012 http://support.microsoft.com/kb/555134

应用程序池也必须启用32位,但我相信如果你到目前为止已经有了这个设置。