algunos de mi código estaba fallando en x64, he de comenzar a excavar y esto es debido a algún código que llama a los nativos cosas a través de la ejecución.getRuntime().exec()…

Pero este código es probablemente algunos años, no toma en cuenta más reciente sistema operativo, y la parte del código que se parece a esto:

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;

Me gustaría solucionar esto para todos los nuevos OSs (w2008, windows 7, …), pero no tengo acceso a un host de cada tipo, y no quiero instalar en una máquina virtual para ver el valor, ¿alguien sabe de alguna lista en algún lugar? no encontrar ninguna aún.

EDIT: iba a necesitar: windows 7, windows 2003, windows 2008, windows 2008R2
Además, yo no soy el 1.6u18 así que no hay preocupaciones acerca de la error, algunos de los chicos mencionado.

  • Usted podría estar interesado en esta pregunta: stackoverflow.com/questions/1803075/… por Desgracia, no he tenido tiempo para publicar mis resultados como un proyecto de código abierto, aunque 🙁
  • No es una respuesta, pero esta es la razón por la que usted siempre debe tener un caso de incumplimiento.
  • C. Ross, hay una instrucción else, pero de todos modos no como el valor predeterminado es el pensamiento de un linux
InformationsquelleAutor Persimmonium | 2010-03-01

7 Comentarios

  1. 6

    Más probable es que usted puede cambiar el código de decir

    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;
    }
    • Voy a probar una pequeña variación de este: si (nombreso.equals(«Windows 95»)…){ //w95 etc} else if (nombreso.contiene(«Ventanas»)){ //nt y los nuevos} else {//unix}
  2. 7

    Mientras esta no es una solución completa, usted puede obtener una versión de 32 bits versión de JDK y ejecutar una simple impresión de código de os.name y os.version con diferentes opciones de compatibilidad.

    Aquí está el os.name/os.version los valores reportados por diferentes JDKs en un Windows 8.1 cuadro:

    ╔═════════════════╤════════════╤════════════╤════════════╤═══════════════╤═══════════════╤══════════════════════╤══════════════════════╗ 
    ║ Java/OS versión │ Windows 95 │ Windows 98 │ Windows XP │ Windows Vista │ Windows 7 │ Windows 8 │ Windows 8.1 ║ 
    ╟─────────────────┼────────────┼────────────┼────────────┼───────────────┼───────────────┼──────────────────────┼──────────────────────╢ 
    ║ 1.4.2 │ Windows 95 │ Windows 98 │ Windows XP │ Windows Vista │ Windows Vista │ Windows Vista │ Windows Vista ║ 
    ║ │ 4.0 │ 4.10 │ 5.1 │ 6.0 │ 6.1 │ 6.2 │ 6.2 ║ 
    ║ 1.5.0 │ Windows 95 │ Windows 98 │ Windows XP │ Windows Vista │ Windows 7 │ Windows NT (desconocido) │ Windows NT (desconocido) ║ 
    ║ │ 4.0 │ 4.10 │ 5.1 │ 6.0 │ 6.1 │ 6.2 │ 6.2 ║ 
    ║ 1.6.0 │ Windows 95 │ Windows 98 │ Windows XP │ Windows Vista │ Windows 7 │ Windows 8 │ Windows 8 ║ 
    ║ │ 4.0 │ 4.10 │ 5.1 │ 6.0 │ 6.1 │ 6.2 │ 6.2 ║ 
    ║ 1.7.0 │ Windows 95 │ Windows 98 │ Windows XP │ Windows Vista │ Windows 7 │ Windows 8 │ Windows 8.1 ║ 
    ║ │ 4.0 │ 4.10 │ 5.1 │ 6.0 │ 6.1 │ 6.2 │ 6.3 ║ 
    ║ 1.8.0 │ Windows 95 │ Windows 98 │ Windows XP │ Windows Vista │ Windows 7 │ Windows 8 │ Windows 8.1 ║ 
    ║ │ 4.0 │ 4.10 │ 5.1 │ 6.0 │ 6.1 │ 6.2 │ 6.3 ║ 
    ╚═════════════════╧════════════╧════════════╧════════════╧═══════════════╧═══════════════╧══════════════════════╧══════════════════════╝ 
    
  3. 5

    He tratado esta en Symantec cuando Visual Café aún estaba viva… yo no recomiendo hacerlo de esta manera. El problema es que los diferentes proveedores pueden suministrar diferentes cadenas. Me gustaría sugerir el uso de un sistema operativo específico para determinar la plataforma.

    Podría utilizar el «ver» de la utilidad en Windows y «uname» en sistemas Unix.

    Podría ser mejor usar «GetNativeSystemInfo» en Windows, pero que requieren de código nativo.

    La razón por la que sugieren que la manera en lugar de confiar en el Sistema.método getProperty es porque, a continuación, sólo tiene que lidiar con el sistema operativo subyacente en lugar de la JVM sentado en la parte superior de la OS – y que elimina el problema donde los diferentes máquinas virtuales informe de cosas diferentes para la misma plataforma.

    EDITAR:
    Obviamente, usted tendría que probar diferentes maneras de obtener la información, como algunos de ellos pueden requerir la ejecución de la shell en lugar de simplemente el comando. Pero si usted se pega con bash debe ser bueno. Básicamente intentar ejecutar comandos hasta que uno de ellos funciona… no es bonita pero que funcionaría.

    • sólo se admite la jvm de Sun, así que no es un problema para nosotros, pero veo que punto…
  4. 2

    Ninguna lista, pero en Windows7, con un JDK6_u18:

    os.name = «Windows 7»

    Nota: hubo un error en JFK6_u14 y antes de, donde se muestra:

    «Windows Vista» en lugar de «Windows 7» (aunque el sistema operativo era en realidad «Windows 7»), así que ten cuidado!

    Según este HowTo, debe ser «Windows 2003» por el W2003.

  5. 2

    Como las versiones más recientes se debe exigir lo que la línea NT necesario, podría tener más sentido para comprobar las versiones antiguas y más el uso de las NT en su lugar la configuración de la comprobación de nuevas versiones, algo como esto:

    String osName = System.getProperty("os.name");
    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;
    }
  6. 2

    Depende de la versión de Java que se está ejecutando, me encontré con este error:

    http://bugs.sun.com/view_bug.do?bug_id=6819886

    así como utilizar una última versión del JDK debe devolver Windows 7 bien.

    No está seguro acerca de Windows Server 2008, aunque, supongo Windows Server 2008.

    Hay un razonablemente lista completa aquí:

    http://mindprod.com/jgloss/properties.html#OSNAME

    • bug_id=6819886… que acabo de mencionar 3 minutos 😉
    • suspiro si sólo había agregado a mi respuesta 3 minutos antes de, en lugar de buscar para obtener una lista completa de valores para el pobre hombre…
    • Gracias jon, apreciado. Yo ya había visto esa lista, como se puede ver el más reciente de sistemas operativos faltan…
  7. 0

    Este código le dará el más reciente sistema operativo de windows nombre como «windows server 2016»

    public static String getFullOSName() {
            String cmds ="systeminfo";
            String osName = null;
            try {``
                BufferedReader bufferedreader = executeCommand(cmds);
                String line;
                while ((line = bufferedreader.readLine()) != null) {
                    if (line.contains("OS Name")) {
                        String services[] = line.split(":");
                        osName = services[1].trim();
                        return osName;
                    }
                }
            } catch (Exception ex) {
               }
            return osName;
        }
    
        /**
         * Execute Command 
         * 
         * @param command
         * @return
         * @throws Exception
         */
    
        private static BufferedReader executeCommand(String command) throws Exception {
            BufferedReader bufferedreader = null;
            try {
                Runtime runtime = Runtime.getRuntime();
                Process proc = runtime.exec(command);
                InputStream inputstream = proc.getInputStream();
                InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
                bufferedreader = new BufferedReader(inputstreamreader);
            } catch (Exception ex) {
                throw new Exception("Command Execution failed on windows. command = " + command);
            }
            return bufferedreader;
        }

Dejar respuesta

Please enter your comment!
Please enter your name here