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在开发机器上工作都没有问题。
答案 0 :(得分:2)
我知道使用LocalSystem作为应用程序池标识可以解决问题。
我知道这不太理想,在您的情况下甚至可能不允许。因此,您还可以尝试修改ASPNET用户或自定义本地或域用户的本地策略。用户当然需要对ooo可执行文件夹的读/执行权限,也许还需要temp。
在Vista / Server 2008及更高版本上,如果没有本地管理员或本地系统,我无法让它工作。我认为它与PROCESS_QUERY_INFORMATION权限的更改有关,因为“.Bootstrap()”调用正在寻找附加到刚刚创建的OO进程。如果您的年龄较大,可以尝试以下操作:
运行secpol.msc或管理工具/本地安全策略, 在本地政策/用户权利分配:
http://support.microsoft.com/default.aspx?scid=kb;en-us;317012 http://support.microsoft.com/kb/555134
应用程序池也必须启用32位,但我相信如果你到目前为止已经有了这个设置。