我们有一个用InstallShield制作的安装器, 在vista,Windows7上表现的不好, 存在一些问题.
也因此,我们的客户希望我么做一个"支持的操作系统的判断".
具体到windows这里就是: win2000,xp,WinServer2003这三个版本正常安装, 其他的windows版本则可能存在问题.
Java的System.getProperties() 方法的javadoc上有一个列表,列出了他支持对哪些系统属性的查询.
其中比较有用的是下面这三个.
System.out.println("OS name: " + System.getProperty("os.name")); System.out.println("OS arch: " + System.getProperty("os.arch")); System.out.println("OS version: " + System.getProperty("os.version"));
剩下的工作就是解析这些返回值,分别对应什么操作系统了.
msdn上面有这样一个链接:Operating System Version 上面的内容是这样的:
Windows 7 | 6.1 |
Windows Server 2008 R2 | 6.1 |
Windows Server 2008 | 6.0 |
Windows Vista | 6.0 |
Windows Server 2003 R2 | 5.2 |
Windows Server 2003 | 5.2 |
Windows XP | 5.1 |
Windows 2000 | 5.0 |
如果msdn里面写的东西, 100%正确的话, 那么问题到这里也就结束了,
可问题偏偏不是这样......
下面这两个链接是wikipedia上面关于windows的链接:
里面就有一个例外, 64bit的XP的version number是5.2, 跟2003的一样,
wikipedia上面关于这一点的原因是:
Windows_XP_Professional_x64_Edition是在win2003之后开发的, 他使用的codebase是2003的.
也因此, 在使用前述的java代码获得它的os.name时, 得到的也是2003, 而非64位的bit.
不过还好, 我们的代码是对2003与xp一视同仁的, 不用具体区分.
从这一现象可以看出, 微软认为这个事, 不是一个事关紧要的问题.......
另外:
C#里面可以写下面的代码,他得到的信息比java丰富, 有service pack等信息.
OperatingSystem os = Environment.OSVersion; // Display the value of OperatingSystem.VersionString. By default, this is // the same value as OperatingSystem.ToString. Console.WriteLine("This operating system is {0}", os.VersionString);
同时C#里面也有类:System.Version
对他可以直接应用lessThan(), greaterThan()方法.