web-dev-qa-db-fra.com

installation de JDK8 sous Windows XP - erreur advapi32.dll

J'ai téléchargé JDK8 build b121 et lors de l'installation, j'obtiens le message d'erreur suivant:

the procedure entry point RegDeleteKeyExA could not be located in the dynamic link library ADVAPI32.dll

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

59
yashhy

Cela est dû au fait qu'Oracle a abandonné la prise en charge de Windows XP (pour lequel RegDeleteKeyExA n'est pas utilisé par le programme d'installation dans son ADVAPI32.DLL D'ailleurs), comme décrit dans http://mail.openjdk.Java.net/pipermail/openjfx-dev/2013- July/009005.html . Pourtant, alors que le support officiel de XP est terminé, les binaires Java sont toujours (à partir de Java 8u20 EA b05 au moins) compatibles XP - seul l'installateur n'est pas ...

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

  1. obtenez 7-Zip (ou tout autre bon décompacteur), décompressez le fichier .exe manuellement, il contient un fichier .Zip (tools.Zip), extrayez-le aussi,

  2. utilisez unpack200 à partir de JDK8 pour décompresser tous les fichiers .pack en fichiers .jar (les anciens dépaulements ne fonctionneront pas correctement); La variable d’environnement Java_HOME Doit être définie sur la racine de décompression Java, par exemple. "C:\Program Files\Java\jdk8" - vous pouvez le spécifier implicitement, par exemple.

    SET Java_HOME=C:\Program Files\Java\jdk8
    
    • Décompressez tous les fichiers avec une seule commande (dans un 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 à partir de la racine de JRE):

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

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

    packname est par exemple rt

  3. pointez l'outil que vous voulez utiliser (par exemple, Netbeans) sur le %Java_HOME% et vous êtes prêt à partir.

Remarque: vous ne devriez probablement pas faire cela simplement en utilisant Java 8 dans votre navigateur Web ou pour une raison similaire (l'installation de JRE 8 nous vient à l'esprit); Les failles de sécurité dans les premières mises à jour des versions majeures de Java sont (pensez-vous) légendaire, et aucun support réel pour XP ni Java 8 sur XP ne fait qu'empirer les choses. Sans parler de vous , vous n'avez pas besoin de Java dans votre navigateur (voir, par exemple, http://nakedsecurity.sophos.com/2013/ 01/15/disable-Java-navigateurs-homeland-security / - le sujet est déjà traité sur de nombreuses pages, mais cherchez-le sur Google si vous souhaitez des informations complémentaires). Dans tous les cas, autant que je sache, pour appliquer cette procédure à JRE, il suffit de modifier certains des chemins spécifiés ci-dessus de \bin\ À \lib\ (L'emplacement du fichier dans l'arborescence de répertoires du programme d'installation est légèrement différent. ) - pourtant je fortement déconseille de le faire.

Voir aussi: Comment puis-je obtenir le dernier fichier JRE/JDK sous la forme d'un fichier Zip plutôt que d'un programme d'installation EXE ou MSI? , JRE 1.7 - Java version - renvoie: Java/lang/NoClassDefFoundError: Java/lang/Object

76
vaxquis

Il existe également une solution alternative pour ceux qui n'ont pas peur d'utiliser des éditeurs hexadécimaux (par exemple XVI32) [grâce à Trevor pour cela]: dans le décompressé  1 fichier d'installation exécutable (jdk-8uXX-windows-i586.exe dans le cas de JDK), il suffit de remplacer toutes les occurrences de RegDeleteKeyExA (le nom de l’API trouvé dans "new" ADVAPI32.DLL) avec RegDeleteKeyA (nom de l'API héritée), suivi de deux caractères hexadécimaux '00 (pour préserver les limites de remplissage/segmentation). Le programme d'installation se plaindra de la version Windows non prise en charge, mais fonctionnera néanmoins.

Pour référence, les chaînes hexagonales 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 à la fois aux packages hors ligne (autonome) et en ligne (téléchargeur).

1: certaines versions plus récentes de l'installateur sont emballées avec UPX - vous devez d'abord les décompresser, sinon vous ne pourrez tout simplement pas trouver la chaîne hexadécimale Champs obligatoires

21
vaxquis

Oracle a annoncé un correctif pour Windows XP

Oracle a décidé de réparer l’installation de Windows XP. À compter de la version JRE 8u25 du 15/10/2014, le code du programme d’installation a été modifié afin que l’installation sous Windows XP est à nouveau possible.

Toutefois, cela ne signifie pas qu'Oracle continue à prendre en charge Windows XP. Ils ne font aucune garantie quant à la compatibilité des versions actuelles et futures de JRE8 avec Windows XP. On dirait que c'est une course à vos risques et périls.

Voir le post du blog Oracle ici.

Vous pouvez obtenir le le dernier JRE8 directement sur le site de téléchargement Oracle.

17
kevingreen

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

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

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

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