繁体   English   中英

Windows服务器上的Tomcat出现问题

[英]Tomcat on Windows server woes

简介 :调用从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->我的Java代码-> rt.exec()链运行时, cmd不会执行,尽管不会引发异常。 当我检查Windows事件日志时,我看到带有故障模块名称cv110.dll的process_video的APPCHRASH事件,这是我从cmd链接的OpenCV DLL之一。

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

任何帮助都感激不尽,

谢谢!

库尼特

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM