Je veux vérifier l'édition Windows (base ou professionnelle ou professionnelle ou professionnelle ou autre) en Java. P>
Comment puis-je faire cela? P>
6 Réponses :
Vous pouvez obtenir de nombreuses informations sur le système que vous utilisez en demandant à la JVM des propriétés du système: Plus d'infos ici: http://www.herongyang.com/java/system-jvm-and-os-system -Properties.html p> os.name code> semble être votre meilleur pari p> p> P>
Je pensais à cela, mais cela ne renvoie pas les informations exactes (type Windows) requise par l'OP. Peut-être qu'il peut exécuter une commande Windows et la lire à partir de ce processus code>.
Vous pouvez utiliser le Library Apache Commons P>
La classe SystemUtils fournit plusieurs méthodes pour déterminer ces informations. P>
+1 @cubalibre Très utile de choses très utiles, et il semble livrer ce que veut l'OP.
Je ne sais pas comment c'est ce que cela veut que OP veut parce que systélutils code> 'Docs mentionne qu'ils renvoient les propriétés standard de JVM os.name code>, os.version < / code> et os.arch code>.
Le lien est 404.
Vous pouvez toujours utiliser Java pour appeler la commande Windows 'Systeminfo' puis analyser le résultat, je ne peux pas sembler trouver un moyen de le faire de manière native en Java.
Hunter, vous avez raison, pas possible à travers Java directement et merci pour votre réponse. Bien que j'ai eu une solution avant votre message, je n'ai pas partagé de raison personnelle. En fait, il y a une meilleure façon:
Processus de processus = runtime.getrontime (). EXED ("CMD / C Systeminfo | FindStr / B / C: \" nom du système d'exploitation \ ""); BufferedReader bufferedreader = nouveau bufferedReader (nouvelle INPUTREAMReader (processus.getInputStream ())); Ligne de chaîne = bufferedreader.readline (); Si (ligne.indexof ("professionnel")> 0) ...
Les résultats de A system.geproperty ("os.name") code> varient entre différentes machines virtuelles Java (même le soleil / oracle): p>
JRE code> retournera Windows 8 code> pour une machine Windows 8. Pour le même système, un Windows NT (inconnu) code> est renvoyé lors de l'exécution du même programme avec un jdk code>. P>
system.geproperty ("os.version") code> semble plus fiable à ce sujet. Pour Windows 7 code> Il renvoie 6.1 code> et 6.2 code> pour Windows 8 code>. P>
Mise à jour: avec Windows 10 et JRE11 Apparemment Os.Name n'est pas fiable du tout.
Chasseur refactored Hunter McMillen's Réponse Pour être plus efficace et plus extensible.
import java.io.*;
public class WindowsUtils {
private static final String[] EDITIONS = {
"Basic", "Home", "Professional", "Enterprise"
};
public static void main(String[] args) {
System.out.printf("The edition of Windows you are using is: %s%n", getEdition());
}
public static String findSysInfo(String term) {
try {
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("CMD /C SYSTEMINFO | FINDSTR /B /C:\"" + term + "\"");
BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream()));
return in.readLine();
} catch (IOException e) {
System.err.println(e.getMessage());
}
return "";
}
public static String getEdition() {
String osName = findSysInfo("OS Name:");
if (!osName.isEmpty()) {
for (String edition : EDITIONS) {
if (osName.contains(edition)) {
return edition;
}
}
}
return null;
}
}
os.name: Windows 8.1 os.version: 6.3 os.arch: amd64
Comment voudriez-vous le vérifier à l'extérieur de Java?
Cet article fournit quelques détails sur la version Windows et Edition msdn.microsoft.com/en-us/library/ms724429(v=vs.85).aspx
@Vash, même si votre article est utile, l'OP souhaite obtenir les informations de Java (et non C / C ++)
@Le gentleman Elite, je me rends compte que. L'intention était de mettre une lumière sur la manière dont ces données sont réellement stockées dans le système, car l'édition est une valeur numérique non un ensemble de caractères préparé.
Tout le monde! Merci beaucoup pour vos intrants. Mais la chasse est toujours sur - je cherche à trouver Windows "Edition" comme indiqué dans OP.
Je ne sais pas si c'est une solution appropriée pour vous, mais vous pouvez exécuter un fichier de commandes à partir de Java qui diffuse «Systeminfo> Whats.txt», puis vous analysez le nom .txt pour le nom de système d'exploitation que je pense contient l'édition. Ou vous appelez GETPRODUCTINFO via JNI.
@Sannidhi: Vous pouvez cibler la bonne version Windows à l'aide de Solution fournie par Cubalibre