installer JDK8 sur Windows XP – erreur advapi32.dll

J’ai téléchargé JDK8 build b121 et en essayant d’installer je reçois l’erreur suivante:

le point d’entrée de procédure RegDeleteKeyExA n’a pas pu être localisé dans la bibliothèque de liens dynamics ADVAPI32.dll

Le système d’exploitation est Windows XP, version 2002 Service Pack 3, 32 bits.

Cela se produit parce qu’Oracle a abandonné la prise en charge de Windows XP (qui n’a pas RegDeleteKeyExA utilisé RegDeleteKeyExA dans son programme ADVAPI32.DLL ) comme décrit dans http://mail.openjdk.java.net/pipermail/openjfx-dev/ 2013-juillet / 009005.html . Pourtant, alors que le support officiel de XP est terminé, les fichiers binarys Java sont toujours compatibles (à partir de Java 8u20 EA b05 au moins). Compatible XP – seul l’installateur n’est pas …

À cause de cela, la solution est en fait assez simple:

  1. obtenir 7-zip (ou tout autre archiveur de qualité), décompressez la dissortingbution .exe manuellement, elle contient un fichier .zip ( tools.zip ), extrayez-le également,

  2. utilisez unpack200 de JDK8 pour décompresser tous les fichiers .pack en fichiers .jar (les anciens décompactages ne fonctionneront pas correctement); JAVA_HOME variable d’environnement JAVA_HOME doit être définie sur votre racine de décompression Java, par exemple “C: \ Program Files \ Java \ jdk8” – vous pouvez le spécifier implicitement, par ex.

     SET JAVA_HOME=C:\Program Files\Java\jdk8 
    • Décompresser tous les fichiers avec une seule commande (en fichier batch):

       FOR /R %%f IN (*.pack) DO "%JAVA_HOME%\bin\unpack200.exe" -r -v "%%f" "%%~pf%%~nf.jar" 
    • Décompressez tous les fichiers avec une seule commande (ligne de commande de la racine JRE):

       FOR /R %f IN (*.pack) DO "bin\unpack200.exe" -r -v "%f" "%~pf%~nf.jar" 
    • Décompressez en localisant manuellement les fichiers et en les décompressant un par un:

       %JAVA_HOME%\bin\unpack200 -r packname.pack packname.jar 

    packname est par exemple rt

  3. pointez l’outil que vous souhaitez utiliser (par exemple Netbeans) vers %JAVA_HOME% et vous êtes prêt à partir.

Remarque: vous ne devriez probablement pas faire cela uniquement pour utiliser Java 8 dans votre navigateur Web ou pour une raison similaire (l’installation de JRE 8 vous vient à l’esprit). Les failles de sécurité des premières mises à jour des versions majeures de Java sont légendaires , ajoutant qu’aucune prise en charge réelle de XP ou de Java 8 sur XP ne fait qu’empirer les choses. Sans compter que vous n’avez généralement pas besoin de Java dans votre navigateur (voir par exemple http://nakedsecurity.sophos.com/2013/01/15/disable-java-browsers-homeland-security/ – le sujet est déjà couvert sur beaucoup pages, il suffit de Google si vous avez besoin de plus amples informations). Dans tous les cas, la seule chose requirejse pour appliquer cette procédure à JRE est de changer certains des chemins spécifiés ci-dessus de \ bin \ vers \ lib \ (le placement du fichier dans l’arborescence du répertoire du programme d’installation est un peu différent). contre le faire.

Voir aussi: Comment puis-je obtenir le dernier JRE / JDK sous forme de fichier zip plutôt que de programme d’installation EXE ou MSI? , JRE 1.7 renvoie: java / lang / NoClassDefFoundError: java / lang / Object

Il existe également une autre solution pour ceux qui n’ont pas peur d’utiliser des éditeurs hexadécimaux (par exemple, XVI32) [merci à Trevor pour cela]: dans l’exécutable 1 du programme d’ installation décompressé ( jdk-8uXX-windows-i586.exe dans le cas du JDK) remplacez simplement toutes les occurrences de RegDeleteKeyExA (le nom de l’API trouvé dans “nouveau” ADVAPI32.DLL ) avec RegDeleteKeyA (nom de l’API hérité), suivi de deux hexadécimaux RegDeleteKeyA (pour préserver les limites de remplissage / segmentation). L’installateur se plaindra de la version Windows non prise en charge, mais fonctionnera néanmoins.

Pour référence, les chaînes hexadécimales brutes seront:

 52 65 67 44 65 6C 65 74 65 4B 65 79 45 78 41 

remplacé par

 52 65 67 44 65 6C 65 74 65 4B 65 79 41 00 00 

Remarque: cette procédure s’applique aux packages hors ligne (autonome) et en ligne (téléchargeur).

1: certaines versions plus récentes de l’installateur sont empaquetées avec UPX – vous devrez d’abord les décompresser, sinon vous ne pourrez simplement pas trouver la chaîne hexadécimale requirejse

Oracle a annoncé un correctif pour l’erreur d’installation de Windows XP


J’ajoute cette réponse car Oracle a décidé de réparer l’installation de Windows XP. A partir de la version de JRE 8u25 du 15/10/2014, le bogue a été corrigé pour empêcher l’installation de Windows XP.

Cependant, cela ne signifie pas qu’Oracle continue à prendre en charge Windows XP. Ils ne garantissent pas la compatibilité des versions actuelles et futures de JRE8 avec Windows XP. Il semble que ce soit une course à vos risques et périls.

Voir l’article du blog Oracle ici.

Vous pouvez obtenir le JRE 8u25 (ou le plus récent) directement sur le site de téléchargement Oracle.

Avec JRE 8 sur XP, il existe un autre moyen: utiliser MSI pour déployer un package.

  • Installez JRE 8 x86 sur un PC avec système d’exploitation pris en charge
  • Copiez c: \ Users [USER] \ AppData \ LocalLow \ Sun \ Java \ jre1.8.0 \ jre1.8.0.msi et Data1.cab sur XP PC et exécutez jre1.8.0.msi

ou (manière silencieuse, utilisable en fichier batch etc.)

 for %%I in ("*.msi") do if exist "%%I" msiexec.exe /i %%I /qn EULA=0 SKIPLICENSE=1 PROG=0 ENDDIALOG=0