我的问题如下:
我启动一个Windows应用程序,其中包含Web服务器和具有某些其他逻辑的Web应用程序。手动启动时,一切正常。从Java开始,从我的自动化测试框架开始,我得到了缺少DLL的错误。该dll位于安装路径的根目录C:\ Program Files [Company] [Application name] [Wretched DLL]。可执行文件在同一位置。
要启动该应用程序,我使用以下代码:
int ind = strProcessToRun.lastIndexOf("\\"); //what if / is used?
if (ind == 0) {
ind = strProcessToRun.lastIndexOf("/");
}
String strWorkDir = strProcessToRun.substring(0, ind);
log.debug("Working dir: " + strWorkDir);
ProcessBuilder builder = new ProcessBuilder(strProcessToRun);
builder.directory(new File(strWorkDir));
process = builder.start();
inheritIO(process.getInputStream(), System.out);
inheritIO(process.getErrorStream(), System.err);
log.debug("Program started: " + strProcessToRun);
操作系统是Win 10 Pro。
当我从应用程序中删除dll时,显示了相同的错误消息。 (提到了丢失的dll以及重新安装该应用程序的建议。)
strProcessToRun是可执行文件及其路径。工作目录是从中得出的。
dll丢失/可执行文件无法访问的原因是什么?有什么可以做的不同吗?
非常感谢!
@edit: 我添加了以下代码,但这以某种方式阻止了我的应用程序的启动:
Map<String,String> env = builder.environment();
String path = "\"" + strWorkDir + "\"";
String existing = env.get("Path");
env.put("Path", path + ";" + existing);
log.debug("PATH adjusted!");
@ Edit2: 设置路径未正确完成。上面已对此进行了更改,我的应用程序启动了。
@ Edit3: 应用程序的主要可执行文件位于安装目录的根目录中。启动该文件后,将启动另一个可执行文件。这位于子目录中。当将错误的dll复制到该子目录时,我可以从自动化测试中启动该应用程序。