4

视窗服务器 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,但没有成功。

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

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

4

1 回答 1

2

我知道使用 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 位,但我相信如果您已经达到了这一步,那么您已经拥有了该设置。

于 2013-08-05T14:44:10.537 回答