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

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在我的开发机器上工作.

最佳答案 我知道使用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位,但我相信如果你到目前为止已经有了这个设置.

点赞