【发布时间】:2016-08-04 05:24:47
【问题描述】:
我正在尝试从我的 Web 应用程序(Windows + Primefaces 5 + Tomcat 8)运行在 Pascal 中开发的 .exe 文件。该程序生成一个文本文件,我将在之后阅读它,但它似乎没有这样做的权限,没有抛出异常。
这是我选择路径的方式:
String path = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/WEB-INF/lib/");
projeto.setQtde(1);
this.esquemas = gerenciarProjeto.realizarCorte(projeto, usuario, path+"/");
这是我如何调用程序:
Runtime rt = Runtime.getRuntime();
Process pc = rt.exec(this.caminho+"cortebi.exe");
InputStreamReader isr = new InputStreamReader(pc.getErrorStream());
BufferedReader br = new BufferedReader(isr);
String line = null;
System.out.println("<ERROR>");
while ( (line = br.readLine()) != null){
System.out.println(line);
}
System.out.println("</ERROR>");
int exitVal = pc.waitFor();
System.out.println("Process exitValue: " + exitVal);
我意识到,如果我将 .exe 文件放入我的项目根目录并以管理员身份运行 Eclipse,它就可以工作。但是我不知道如何在部署后将它放入我的网络应用程序根目录以执行相同的操作,我试图将它放在不同的位置,但什么也没有!
【问题讨论】:
-
您的应用程序会在
Windows上以Admin权限运行吗? -
其实我也不知道,这里是本地大学的,事情不是很清楚。如果我能给 .exe 文件提供写权限,我认为这就足够了。
-
我问是因为您可能无法在 Linux 上运行
exe文件。否则,您可以只嵌入带有 WAR 的可执行文件,将其保存到临时目录并使用 Java ProcessBuilder 执行它。但是,这仅在容器以管理员权限启动时才有效,由于安全原因,情况可能不会如此。为什么还要执行exe呢? -
如果您的可执行文件只是写入标准输出可能会更好 - 您可以在任何需要的地方通过管道传输它而不会弄乱文件权限。
-
.exe 文件是 Pascal 遗留代码,用于解决线性规划问题,我无法以任何形式更改它。遗留代码的工作方式是读取文本文件并创建带有答案的输出文本文件。我可以创建 .exe 所需的文件,但 .exe 本身无法编写答案文件。