2

我正在为 Non-Sucking Service Manager (nssm) 创建一个用于导入和导出配置的工具。不幸的是,该工具本身是专有的,因此我无法向您展示完整的代码,但我面临的问题显示在下面的短程序中。


Windows 7、java 7、java 8、nssm.exe(2.24 版)设置在与您执行的文件夹相同的文件夹中。

问题
从 powershell 运行 nssm.exe 时,它​​会将帮助输出打印到 shell。如果双击 nssm.exe,它将显示一个具有相同输出的窗口。如果我使用 java 7 运行下面的代码,它似乎什么都不做,但它实际上会将输出打印到 stdErr (这是想要的行为,然后我可以在完整版本的代码中使用它)。问题是:当使用 java 8 运行完全相同的代码时,它将启动 nssm.exe,就好像它被双击一样(在这种情况下,不会对 stdErr 进行任何输出)。

澄清
因为我唯一要做的就是交换 java 版本,所以我认为问题出在那儿。Nssm 只是在这里使用,因为它是我遇到问题的地方。尽管 nssm 可能会做一些时髦的事情,或者我没有按预期使用它,但这里不打算讨论它。

问题
1. 造成这种差异的原因是什么?
2. 在这种情况下,如何让 java 8 表现得像 java 7?

编码

package mypackage;

import java.io.*;

/**
 * 
 *
 */
public class App 
{
    public static void main(String[] args) {

        String execString = ".\\nssm.exe";
        Process process = null;

        try {
            process = Runtime.getRuntime().exec(execString);
            process.waitFor();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        process.destroy();

    }
}

此致,

4

0 回答 0