Get version of Windows service pack from Java applet?

I am writing a Java applet. When running on Windows, I need to get the OS version for clients, for example. Windows XP SP3 or Windows 2000 SP4.

I can currently use the following:

String os_name    = System.getProperty( "os.name" );
String os_version = System.getProperty( "os.version" );

System.out.println( "Running on " + os_name + "(" + os_version + ")" );

And it will output something like “Running on Windows 2000 (5.0),” which is great, but I need to also get the service pack version.

Does anyone know how I can get the basic version of a service pack for Windows from a Java applet? (Without throwing an AccessControlException or, ideally, without having to sign an applet).

Thank you very much in advance.

+3
source share
4 answers

You can sign your Java applet yourself:

( : http://www.captain.at/programming/java/)

:

keytool -export -alias yourkey -file yourcert.crt

:

*.bat , :

javac yourapplet.java
jar cvf yourapplet.jar yourapplet.class
jarsigner yourapplet.jar yourkey

, - .

HTML- :

<applet code="yourapplet.class" archive="yourapplet.jar" width="600"

= "500" >     

! , . , java.security.AccessControlException.

, ...

+4

, , sun.os.patch.level:

String os_sp = System.getProperty( "sun.os.patch.level" );
+3

(, , , ), JNA Documentation Here (version.dll, kernel32.dll, user32.dll ..). Daniel Doubrovkine . , . , / .

import com.sun.jna.Native;
import com.sun.jna.platform.win32.Advapi32Util;
import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.Win32Exception;
import com.sun.jna.platform.win32.WinNT;
import com.sun.jna.platform.win32.WinNT.OSVERSIONINFOEX;
import com.sun.jna.platform.win32.WinReg;
import com.sun.jna.platform.win32.WinUser;

/**
 *
 * @author geverding
 */
public class OSVersionInfo {

    private OSVERSIONINFOEX versionInfo;
    private static OSVersionInfo instance = new OSVersionInfo();

    public static OSVersionInfo Istance() {
        return instance;
    }

    public OSVersionInfo() {
        versionInfo = new OSVERSIONINFOEX();
        if (!Kernel32.INSTANCE.GetVersionEx(versionInfo))
        {
            throw new Win32Exception(Kernel32.INSTANCE.GetLastError());
        }
    }

    public int getMajor() {
        return versionInfo.dwMajorVersion.intValue();
    }

    public int getMinor() {
        return versionInfo.dwMinorVersion.intValue();
    }

    public int getBuild() {
        return versionInfo.dwBuildNumber.intValue();

    }

    public String getServicePack() {
        return Native.toString(versionInfo.szCSDVersion);
    }

    @Override
    public String toString() {
        String version = null;

        if (versionInfo.dwPlatformId.intValue() == WinNT.VER_PLATFORM_WIN32_NT)
        {
            // 7
            if (versionInfo.dwMajorVersion.intValue() == 6
                    && versionInfo.dwMinorVersion.intValue() == 1
                    && versionInfo.wProductType == WinNT.VER_NT_WORKSTATION)
            {
                version = "7";
            } // Server 2008 R2
            else if (versionInfo.dwMajorVersion.intValue() == 6
                    && versionInfo.dwMinorVersion.intValue() == 1
                    && versionInfo.wProductType != WinNT.VER_NT_WORKSTATION)
            {
                version = "Server 2008 R2";
            } // Server 2008
            else if (versionInfo.dwMajorVersion.intValue() == 6
                    && versionInfo.dwMinorVersion.intValue() == 0
                    && versionInfo.wProductType != WinNT.VER_NT_WORKSTATION)
            {
                version = "Server 2008";
            } // Vista
            else if (versionInfo.dwMajorVersion.intValue() == 6
                    && versionInfo.dwMinorVersion.intValue() == 0
                    && versionInfo.wProductType == WinNT.VER_NT_WORKSTATION)
            {
                version = "Vista";
            } // Server 2003
            else if (versionInfo.dwMajorVersion.intValue() == 5
                    && versionInfo.dwMinorVersion.intValue() == 2
                    && versionInfo.wProductType != WinNT.VER_NT_WORKSTATION
                    && User32.INSTANCE.GetSystemMetrics(WinUser.SM_SERVERR2) != 0)
            {
                version = "Server 2003";
            } // Server 2003 R2
            else if (versionInfo.dwMajorVersion.intValue() == 5
                    && versionInfo.dwMinorVersion.intValue() == 2
                    && versionInfo.wProductType != WinNT.VER_NT_WORKSTATION
                    && User32.INSTANCE.GetSystemMetrics(WinUser.SM_SERVERR2) == 0)
            {
                version = "Server 2003 R2";
            } // XP 64 bit
            else if (versionInfo.dwMajorVersion.intValue() == 5
                    && versionInfo.dwMinorVersion.intValue() == 2
                    && versionInfo.wProductType == WinNT.VER_NT_WORKSTATION)
            {
                version = "XP";
            } // XP 32 bit
            else if (versionInfo.dwMajorVersion.intValue() == 5
                    && versionInfo.dwMinorVersion.intValue() == 1)
            {
                version = "XP";
            } // 2000
            else if (versionInfo.dwMajorVersion.intValue() == 5
                    && versionInfo.dwMinorVersion.intValue() == 0)
            {
                version = "2000";
            } // Windows NT
            else if (versionInfo.dwMajorVersion.intValue() == 4)
            {
                version = "NT 4";

                if ("Service Pack 6".equals(Native.toString(versionInfo.szCSDVersion)))
                {
                    if (Advapi32Util.registryKeyExists(WinReg.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\WindowsNT\\CurrentVersion\\Hotfix\\Q246009"))
                    {

                        return "NT4 SP6a";
                    }
                }

            } else
            {
                throw new RuntimeException("Unsupported Windows NT version: "
                        + versionInfo.toString());
            }

            if (versionInfo.wServicePackMajor.intValue() > 0)
            {
                version = version + " SP" + versionInfo.wServicePackMajor.intValue();
            }

        } else if (versionInfo.dwPlatformId.intValue() == WinNT.VER_PLATFORM_WIN32_WINDOWS)
        {
            if (versionInfo.dwMajorVersion.intValue() == 4
                    && versionInfo.dwMinorVersion.intValue() == 90)
            {
                version = "ME";
            } else if (versionInfo.dwMajorVersion.intValue() == 4
                    && versionInfo.dwMinorVersion.intValue() == 10)
            {
                if (versionInfo.szCSDVersion[1] == 'A')
                {
                    version = "98 SE";
                } else
                {
                    version = "98";
                }
            } else if (versionInfo.dwMajorVersion.intValue() == 4
                    && versionInfo.dwMinorVersion.intValue() == 0)
            {
                if (versionInfo.szCSDVersion[1] == 'C' || versionInfo.szCSDVersion[1] == 'B')
                {
                    version = "95 OSR2";
                } else
                {
                    version = "95";
                }
            } else
            {
                throw new RuntimeException("Unsupported Windows 9x version: "
                        + versionInfo.toString());
            }
        } else
        {
            throw new RuntimeException("Unsupported Windows platform: "
                    + versionInfo.toString());
        }

        return version;
    }
}
+1

, sun.os.patch.level, AccessControlException.

.

, ,

0
source

Source: https://habr.com/ru/post/1711533/


All Articles