![](/img/trans.png)
[英]Spnego keytab authentication in Tomcat on Windows Server fails
[英]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.