XQuery进程:执行如何执行外部程序?

时间:2018-05-24 10:54:17

标签: xquery exe execute exist-db

我正在Windows上运行exists-db,并希望执行外部Windows程序。

这适用于普通的Windows shell:

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

我想从我的xquery脚本执行相同的程序(我已根据我指定的路径将所有需要的文件上传到我的exists-db):

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)

即使我只执行没有参数的程序(如果我在windows中执行它,我在命令提示符下获取参数作为概述,所以我也应该收到某种输出):

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

但我收到错误:

  

exerr:ERROR执行进程/db/apps/execute-test/resources/RTIMaker/webGLRtiMaker.exe时发生IO错误:无法运行程序&#34; / db / apps / execute-test / resources / RTIMaker /webGLRtiMaker.exe" ;: CreateProcess error = 2,系统找不到文件...

我用它作为参考:Execute External Process

我做错了什么?

2 个答案:

答案 0 :(得分:3)

我最近没有尝试过,但请尝试以下方法:

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上有一篇关于它的文章。

答案 1 :(得分:2)

不幸的是,无法启动存储在数据库中的可执行文件。 java API需要直接访问文件系统上的文件,以及&#39; / db /....&#39;路径不是。