【发布时间】: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