Tomcat на сервере Windows горе - PullRequest
0 голосов
/ 10 августа 2009

Конспект : при вызове исполняемого файла, который ссылается на общие библиотеки из кода 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

Ответы [ 2 ]

2 голосов
/ 10 августа 2009

Добавьте запись в переменную окружения PATH, которая указывает, где находятся ваши DLL. Если это не работает для вашего приложения, вы можете попробовать добавить запись в PATH Tomcat. Вы должны изменить переменную PATH процесса, который будет загружать исполняемый файл. Поскольку ваш Java-код, вероятно, совместно использует JVM (и, следовательно, процесс) с исполняемым файлом Tomcat, он будет определять, в какой среде необходимо обновить переменную PATH.

1 голос
/ 10 августа 2009

Это проблема Windows, а не проблема Tomcat. По умолчанию Windows ищет в% Path% DLL, которые могут не включать каталог файла EXE.

Это можно исправить, создав пустой файл с именем process_video.exe.local в той же директории, что и EXE (т.е. c: \ workspace)

Вы также можете создать файл .manifest, но это немного сложнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...