Конспект : при вызове исполняемого файла, который ссылается на общие библиотеки из кода Java на Tomcat, я получаю ошибки в Windows 2003, тогда как исполняемый файл отлично работает в командной строке.
Я хотел сделать это в Linux, но, увы, был лишен права голоса и должен был реализовать его с помощью Windows Server 2003. Вот так,
У меня есть простой Java-код, работающий на Tomcat, который при получении сигнала «старт» от другого сервера должен запускать внешний исполняемый файл (написанный на C ++ с использованием библиотек DLL общей библиотеки из OpenCV и ffmpeg), например,
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());
}
Теперь, когда я запускаю команду в process_video
из командной строки DOS, она работает (не имеет значения, из какого каталога она выпущена). Однако, когда он запускается через цепочку Tomcat-> my Java code -> rt.exec()
, cmd
не выполняется, хотя исключение не генерируется. Когда я проверяю журналы событий Windows, я вижу событие APPCHRASH для process_video
с именем модуля сбоя cv110.dll, которое является одной из библиотек DLL OpenCV, на которые я ссылаюсь с cmd
.
Одним из решений было бы поместить все библиотеки DLL, используемые в process_video
, в каталог tomcat \ lib, но это вредит моей программной чувствительности, поэтому я хочу знать, есть ли лучший способ решить эту проблему. Какой пользователь использует Tomcat при запуске исполняемых файлов в Windows? Может быть, я могу дать больше привилегий этому пользователю? Должен ли я добавить пути к DLL в файл конфигурации Tomcat?
Любая помощь будет высоко ценится,
Спасибо!
Cuneyt