我的一些代码在x64中失败了,我开始挖掘,这是由于一些代码通过Runtime.getRuntime().exec()调用本机的东西...
但这段代码可能有些年头了,它没有考虑到较新的操作系统,有些代码看起来像这样:
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,...)修复这个问题,但我没有访问每一种主机的权限,我不想安装在虚拟机只是为了看到它的价值,有人知道一些列表吗?我还没有找到任何东西.
编辑:我需要:windows 7,windows 2003,windows 2008,windows 2008R2还有,我不是1. 6u18,所以不用担心一些家伙提到的bug。
8条答案
按热度按时间goqiplq21#
虽然这不是一个完整的解决方案,但您可以获得一个32位JDK,并运行一个简单的代码打印
os.name
和os.version
,并使用不同的兼容性设置。以下是 Windows 8.1 上不同JDK报告的
os.name
/os.version
值:字符串
efzxgjgh2#
最有可能的是你可以把代码改成
字符串
ggazkfy83#
我在赛门铁克处理过这个问题,当时Visual Cafe还活着...我根本不建议这样做。问题是不同的供应商可以提供不同的字符串。我建议使用操作系统特定的方式来确定平台。
您可以在Windows上使用“ver”实用程序,在Unix类型系统上使用“uname”实用程序。
在Windows上使用“GetNativeSystemInfo”可能更好,但这需要本机代码。
我建议使用这种方式而不是依赖System.getProperty方法的原因是,这样你就只需要处理底层操作系统,而不是位于操作系统之上的JVM--这消除了不同VM为同一平台报告不同内容的问题。
编辑:显然,你必须尝试不同的方法来获取信息,因为其中一些可能需要运行shell而不仅仅是命令。但是如果你坚持使用bash,它应该是好的。基本上尝试运行命令,直到其中一个工作...虽然不漂亮,但它会工作。
piok6c0g4#
没有列表,但在Windows7上,使用JDK6_u18:
os.name
=“Windows 7”注:有一个bug on JFK6_u14 and before,其中显示:
“Windows Vista”而不是“Windows 7”(尽管操作系统实际上是“Windows 7”),所以要小心!
根据this HowTo,对于W2003应该是“Windows 2003”。
lrl1mhuk5#
由于较新版本应该要求NT行所需的内容,因此检查旧版本并使用NT设置而不是检查较新版本可能更有意义,如下所示:
字符串
ghhkc1vu6#
取决于你运行的Java版本,我遇到了这个bug:
http://bugs.sun.com/view_bug.do?bug_id=6819886
因此,只要您使用较新版本的JDK,它应该会返回Windows 7。
不确定Windows Server 2008,我猜是Windows Server 2008。
这里有一个相当完整的列表:
http://mindprod.com/jgloss/properties.html#OSNAME
1l5u6lss7#
此代码将为您提供最新的Windows操作系统名称,如“Windows Server 2016”
字符串
yi0zb3m48#
由于这是在不同的搜索上下文下的第一个命中,我将抛出这一点给其他可能更广泛地搜索这个主题的人:
我用它来确定广泛的操作系统(windows vs Mac vs Linux,等等)。它是一个枚举,您可以在程序中的任何地方利用不同的公共静态方法。
public enum OS {
字符串
}