J'essaie d'exécuter dynamiquement un .jar à partir d'un assemblage C# (en utilisant Process.Start(info)
). Maintenant, à partir d'une application console je peux juste lancer:Comment déterminer l'emplacement d'installation de Windows Java
ProcessStartInfo info = new ProcessStartInfo("java", "-jar somerandom.jar");
Dans un ensemble, cependant, je continue à obtenir un Win32Exception
de « Le système ne peut pas trouver le fichier spécifié » et doivent changer la ligne à la pleine chemin de Java comme ça:
ProcessStartInfo info = new ProcessStartInfo("C:\\Program Files\\Java\\jre6\\bin\\java.exe", "-jar somerandom.jar");
Cela ne va évidemment pas. J'ai besoin d'un moyen de déterminer dynamiquement (mais déclarativement) l'emplacement installé de Java. J'ai commencé à penser à regarder dans le registre, mais quand je suis arrivé là, j'ai remarqué qu'il y avait des clés spécifiques pour les versions et qu'elles ne pouvaient même pas être numériques (par exemple "HKEY_LOCAL_MACHINE \ SOFTWARE \ JavaSoft \ Java Runtime Environnement \ 1.6 "et" HKEY_LOCAL_MACHINE \ SOFTWARE \ JavaSoft \ Java Runtime Environment \ 1.6.0_20 ").
Quelle serait la solution «long-courrier» la plus fiable pour trouver le chemin java.exe le plus à jour à partir d'une application C#?
Merci beaucoup à l'avance.
- EDIT -
Merci à une combinaison de GenericTypeTea 's et Stephen Cleary' réponses s, j'ai résolu le problème avec les éléments suivants:
private String GetJavaInstallationPath()
{
String javaKey = "SOFTWARE\\JavaSoft\\Java Runtime Environment";
using (var baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(javaKey))
{
String currentVersion = baseKey.GetValue("CurrentVersion").ToString();
using (var homeKey = baseKey.OpenSubKey(currentVersion))
return homeKey.GetValue("JavaHome").ToString();
}
}
Cela semble parfait! Merci de m'avoir fait remarquer que j'ai manqué le 'CurrentVersion'. Je continue d'obtenir NullRef sur 'rk', cependant.; ( – Lance
Il est courant que l'utilisateur écrase le chemin java "autodétecté" avec une variable d'environnement appelée "JAVA_HOME" .Un programmeur doit respecter hat et lui donner la priorité: string java_path = Environment.GetEnvironmentVariable ("JAVA_HOME") ?? GetJavaInstallationPath(); –
@Lance - Je ne suis pas un expert Java, donc c'est seulement une meilleure estimation.) Avez-vous jeté un oeil pour voir si la clé est là? @SchlaWiener - Mise à jour de ma réponse pour refléter votre commenter (je pense) – GenericTypeTea