Могу ли я выполнить.exec() 32-разрядный пакетный файл из 64-разрядной Java?

#java #windows #tomcat #batch-file #32bit-64bit

#java #Windows #tomcat #пакетный файл #32-битный-64-битный

Вопрос:

Мы находимся в процессе обновления нашего сервера с 32-разрядной Windows 2003 до 64-разрядной Windows 2008, и я провожу некоторую проверку, прежде чем мы выберем 32-разрядные или 64-разрядные версии наших обновленных серверных приложений.

В настоящее время у нас есть сервер Tomcat с несколькими веб-приложениями, которые запускают скрипты perl (внутри пакетных файлов Windows) с использованием Runtime.getRuntime().exec() . Скрипты perl, в свою очередь, запускают MS Office для создания объектов и управления ими.

Из того, что я прочитал, большинство людей (включая Microsoft) рекомендуют устанавливать 32-разрядную версию Office, если только у вас нет очень веских причин для установки 64-разрядной версии (и на данный момент я не думаю, что мы делаем).

Похоже, это, вероятно, означает, что я должен запускать 32-разрядный Perl для создания 32-разрядных объектов Office.

Вопрос в том, означает ли это, что мне также нужно запускать Tomcat на 32-разрядной Java? Если да, то у меня есть второй вопрос: могу ли я установить несколько экземпляров Tomcat в разные JVM, чтобы воспользоваться преимуществами дополнительной памяти в 64-разрядной ОС?

Если возможно запустить 32-разрядный процесс из 64-разрядной Java, существуют ли какие-либо специальные приемы или достаточно просто указать WOW64 в пути к команде cmd?

Комментарии:

1. вы можете запустить 32-разрядный процесс в 64-разрядной среде, но, как вы упомянули, возможно, вы не сможете использовать дополнительную память, которую вы можете использовать Runtime.getRuntime().exec() для запуска 32-разрядного или 64-разрядного приложения, 32-разрядный процесс в 64-разрядной Windows будет иметь * 32 против его имени в диспетчере задач..

2. Вам не обязательно запускать 32-разрядный Perl. Я ожидал бы, что 64-разрядный Perl сможет отлично работать с 32-разрядной версией Office, вероятно, даже без необходимости вносить какие-либо изменения в код.

3. Гарри, это одна из вещей, которые я пытаюсь выяснить. Я видел сообщения людей, у которых были проблемы, и чьи проблемы были решены, когда они удалили 64-разрядный Perl и установили вместо него 32-разрядный. Если нам удастся заставить все работать в 64-разрядной версии, это, вероятно, предпочтительнее в будущем, поэтому я спрашивал о запуске 32-разрядных процессов из 64-разрядной Java (то есть я хотел бы запустить 64-разрядную Java, если это вообще возможно, даже если я не могузапустите 64-разрядный Office или 64-разрядный Perl).

4. Спасибо, Ананта. Моя главная проблема заключается не в ограничениях памяти для отдельных сценариев пакетного файла / perl, а в том факте, что Tomcat будет запускать несколько из них одновременно, поэтому их совокупное использование памяти может превысить 32-разрядный предел.

Ответ №1:

В документах exec указано

(…) Запуск процесса операционной системы сильно зависит от системы. (…)

Таким образом, можно было бы предположить, что вполне возможно запустить 32-разрядный процесс из 64-разрядного Java-процесса, поскольку запуск другого процесса в Windows вообще не заботится о разрядности.

Если вы запустите SysWOW64cmd.exe , у вас все должно быть в порядке.

Какой дистрибутив Perl вы используете? Версии Strawberry Portable ZIP можно использовать параллельно, ничего не устанавливая.

Комментарии:

1. Спасибо, Мартин. В настоящее время мы используем ActivePerl 5.8.8. Я также пытаюсь решить, следует ли перейти на более актуальную версию, но это вопрос для другого потока. 🙂

2. Да, я тоже застрял ASP 5.8.8 , преобразование в strawberry 5.10 было довольно тривиальным в моем случае (но я не преобразовал все). Хорошо, что даже с установленным ASP 5.8 вы все равно можете использовать Strawberry portable edition, поскольку все, от чего зависит perl, — это правильные настройки пути, и они тривиально исправлены для скрипта portable launcher.