我的某些代码在x64中失败,我开始进行挖掘,这是由于某些代码通过Runtime.getRuntime()。exec()调用 native 内容造成的。

但是这段代码可能已经使用了几年了,没有考虑到较新的操作系统,并且其中一些代码如下所示:

String osName = System.getProperty("os.name");
    if (osName.equals("Windows NT") || osName.equals("Windows 2000") || osName.equals("Windows XP")) {
        cmd = new String[3];
        cmd[0] = WINDOWS_NT_2000_COMMAND_1;
        cmd[1] = WINDOWS_NT_2000_COMMAND_2;
        cmd[2] = command;
    } else if (osName.equals("Windows 95") || osName.equals("Windows 98") || osName.equalsIgnoreCase("Windows ME")) {
        cmd = new String[3];
        cmd[0] = WINDOWS_9X_ME_COMMAND_1;
        cmd[1] = WINDOWS_9X_ME_COMMAND_2;
        cmd[2] = command;

我想针对所有新的操作系统(w2008,Windows 7,...)修复此问题,但是我无权访问各种主机,也不想安装在VM中只是为了看到其值(value),有人知道某个地方的名单吗?尚未找到任何东西。

编辑:我需要:Windows 7,Windows 2003,Windows 2008,Windows 2008R2
另外,我不是1.6u18,所以不用担心某些人提到的bug。

最佳答案

您很可能可以更改代码以说

if (osName.equals("Windows 95") || osName.equals("Windows 98") || osName.equalsIgnoreCase("Windows ME")) {
    cmd = new String[3];
    cmd[0] = WINDOWS_9X_ME_COMMAND_1;
    cmd[1] = WINDOWS_9X_ME_COMMAND_2;
    cmd[2] = command;
}
else {
    cmd = new String[3];
    cmd[0] = WINDOWS_NT_2000_COMMAND_1;
    cmd[1] = WINDOWS_NT_2000_COMMAND_2;
    cmd[2] = command;
}

08-04 15:58