Процесс XQuery: выполнить, как выполнить внешнюю программу? - PullRequest
0 голосов
/ 24 мая 2018

Я запускаю существующий-db в Windows и хотел бы выполнить внешнюю программу Windows.

Это работает в обычной оболочке Windows:

C:\path\to\webGLRtiMaker.exe C:\path\to\ImageFile.rti -q 90

И я хотел бы выполнитьта же программа из моего скрипта xquery (я загрузил все необходимые файлы в соответствии с указанными путями к моей существующей базе данных):

xquery version '3.1';

import module namespace process="http://exist-db.org/xquery/process" at "java:org.exist.xquery.modules.process.ProcessModule";

declare variable $options :=    '<options>
                                    <workingDir>/db/apps/test-project/images</workingDir>
                                    <stdin><line>/db/apps/execute-test/images/image1.rti -q 90</line></stdin>
                                </options>';

(:process:execute($webRtiMaker, <options/>):)
process:execute('/db/apps/execute-test/resources/RTIMaker/webGLRtiMaker.exe', $options)

Даже если я только запускаю программу без параметров (если я ее выполняювнутри окон я получаю параметры в виде обзора внутри командной строки, поэтому я также должен получить какой-то вывод):

process:execute('/db/apps/execute-test/resources/RTIMaker/webGLRtiMaker.exe', <options/>)

Но я получаю ошибку:

exerr: ОШИБКАПроизошла ошибка ввода-вывода при выполнении процесса /db/apps/execute-test/resources/RTIMaker/webGLRtiMaker.exe: не удается запустить программу "/db/apps/execute-test/resources/RTIMaker/webGLRtiMaker.exe": ошибка CreateProcess =2. Система не может найти файл ...

Я использовал это как ссылку: Выполнить внешний процесс

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

К сожалению, невозможно запустить исполняемый файл, который хранится в базе данных.API Java требует прямого доступа к файлу в файловой системе, а путь '/ db / ....' не является.

0 голосов
/ 24 мая 2018

Я не пробовал это в последнее время, но попробуйте следующее:

import module namespace process="http://exist-db.org/xquery/process" at "java:org.exist.xquery.modules.process.ProcessModule";

let $cmd := 'C:\path\to\webGLRtiMaker.exe C:\path\to\ImageFile.rti -q 90'
return
    <results>{process:execute($cmd, <options/>)}</results>

На XQuery WikiBook есть статья об этом.

...