【问题标题】:Tomcat on Windows server woesWindows服务器上的Tomcat问题
【发布时间】:2009-08-10 16:57:42
【问题描述】:

概要:当从 Tomcat 上的 Java 代码调用链接到共享库的可执行文件时,我在 Windows 2003 上遇到错误,而可执行文件在命令提示符下运行良好。

我想在 Linux 中执行此操作,但遗憾的是,它被否决了,不得不使用 Windows Server 2003 来实现它。就这样吧,

我在 Tomcat 上运行了一个简单的 Java 代码,当它从另一台服务器接收到“启动”信号时,它必须像这样运行外部可执行文件(用 C++ 编写,使用来自 OpenCV 和 ffmpeg 的共享库 DLL)

    String cmd = "c:\\workspace\\process_video.exe -video " + filename;

    // Execute the command
    Process proc = null;
    try {
        proc = rt.exec(cmd);
    } catch (Exception e) {
        System.out.println("VA-> Exception thrown in running the command!");
        errorOut.append(e.getStackTrace().toString());      
    }

现在,当我从 DOS 命令提示符运行process_video 中的命令时,它可以工作(无论它是从哪个目录发出的)。但是,当它通过 Tomcat->my Java code->rt.exec() 链运行时,cmd 不会被执行,尽管不会抛出异常。当我检查 Windows 事件日志时,我看到 process_video 的 APPCHRASH 事件,其故障模块名称为 cv110.dll,这是我从 cmd 链接的 OpenCV DLL 之一。

一种解决方案是将process_video 中使用的所有DLL 填充到tomcat\lib 目录中,但这会损害我的编程敏感性,所以我想知道是否有更好的方法来解决这个问题。在 Windows 上运行可执行文件时,Tomcat 使用什么用户?也许我可以给那个用户更多的权限?我应该将 DLL 路径添加到 Tomcat 的配置文件吗?

任何帮助将不胜感激,

谢谢!

库内特

【问题讨论】:

    标签: java windows tomcat shared-libraries


    【解决方案1】:

    在指向 DLL 所在位置的 PATH 环境变量中添加一个条目。如果这对您的应用程序不起作用,您可以尝试将条目添加到 Tomcat 的 PATH。您必须修改将加载可执行文件的进程的 PATH 变量。由于您的 Java 代码可能与 Tomcat 可执行文件共享一个 JVM(因此是一个进程),这将决定 PATH 变量需要更新的环境。

    【讨论】:

    • Kelly,我已经在 PATH 中有 DLL 目录(请记住,我实际上可以从命令提示符运行可执行文件)。如何将目录添加到 Tomcat 的 PATH 变量中?
    • 呃,我把它们放在我的用户的路径上,而不是系统路径上。一旦我将 DLL 目录放在那里,问题就消失了。真是愚蠢的问题。
    【解决方案2】:

    这是一个 Windows 问题,而不是 Tomcat 问题。 默认情况下,Windows 在 %Path% 中查找 DLL,其中可能不包括 EXE 文件的目录。

    您可以通过在与 EXE 相同的目录(即 c:\workspace)中创建一个名为 process_video.exe.local 的空文件来解决此问题

    您也可以创建一个 .manifest 文件,但这有点复杂。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 2020-12-20
      • 1970-01-01
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 2014-03-06
      相关资源
      最近更新 更多