为什么我缺少DLL?

时间:2019-05-24 13:41:38

标签: java windows dll process

我的问题如下:

我启动一个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复制到该子目录时,我可以从自动化测试中启动该应用程序。

0 个答案:

没有答案