Question

J'ai une application Java qui nécessite certains logiciels (l'un d'eux étant Perl) avant qu'il ne puisse être exécuté. Ce que je faisais pour détecter pour Perl est:

Runtime.getRuntime().exec("perl Test.pl");

et s'il y avait une IOException déclarer qu'il n'y avait pas de Perl.

Cependant, un de mes utilisateurs se sont plaints que l'application a gardé à défaut parce qu'il n'a pas placé Perl dans son chemin varible. Donc, c'est la raison pour laquelle je demande: Est-il possible de système croisée d'exploitation pour détecter si Perl (ou tout autre logiciel) est installé sur le système de l'utilisateur et le chemin du programme

Était-ce utile?

La solution

Je ne sais pas votre public cible (utilisateurs), mais en cas de panne vous pourriez demander à l'utilisateur d'entrer le chemin (un FileChooserDialog) puis stocker cette voie pour un usage futur (si l'exception ne nouveau jeté). Je l'ai fait il y a quelque temps, heureusement, j'ai eu les utilisateurs qui étaient les administrateurs système, il était OK pour eux de fournir cette information lorsque l'erreur est survenue la première fois (j'ai aussi montré comment mettre à jour ou modifier ces valeurs dans un fichier de propriétés).

Une autre option comme mentionné par Don, est d'installer le logiciel requis que par rapport à votre installation, qui est une option plus commune.

Autres conseils

Ce genre de questions semblent éclater à chaque maintenant et puis et la réponse (presque) est toujours pas. La plupart raison générale de la réponse négative est que Java est exécuté dans un environnement de machine virtuelle homogène qui est par la conception même sur toutes les plateformes; Ces opérations vous ne pouvez pas abstraire / ne fiable sur au moins les plates-formes les plus soutenues tout ne peut se faire facilement. La détection d'événements externes dans le système d'exploitation en général tels que les applications non Java sont gérées également / installés tombe dans cette catégorie « pas facile à faire ».

Certes, il pourrait y avoir besoin / marché pour les bibliothèques JNI dans le but, mais ceux steer fortement de la -cross plate-forme exigence ces questions semblent toujours vouloir et c'est la raison pour laquelle la réponse est « non » . Pour autant que je peux voir, ce que vous faites est actuellement la plus propre façon de détecter Perl à moins que vous êtes prêt à inclure perljvm ou similaire dans votre projet.

Si l'utilisateur ne souhaite pas non plus

  • Installer Perl dans un endroit convenu
  • Indiquez où perl a été installé en stockant son emplacement dans une variable d'environnement, le fichier de configuration, registre de Windows, etc.

il semble que vous êtes seule option est de rechercher sur le disque entier pour un exécutable nommé « Perl ». Il est évident que cela pourrait prendre un temps très long, mais si vous stockez l'emplacement quelque part, au moins vous ne devez besoin de chercher une fois

Obtenir des informations de Windows natif à l'aide du SDK Java n'est pas possible sans le soutien des API externes. Au lieu d'utiliser des API externes (qui est la plupart du temps LGPL licence et pas complètement ouvert), on peut utiliser la commande shell pour obtenir le même.

Étape 1 - Vérification (perl) une application est installée

Pour vérifier si une application est installée, utilisez ProcessBuilder ou Runtime.exec d'exécuter l'un de la commande PowerShell suivante,

Get-ItemProperty HKLM: \ Software \ Microsoft \ Windows \ CurrentVersion \ Uninstall * | Select-Object DisplayName | où {$ _. "perl" DisplayName -match}

Remplacer « perl » avec votre choix de logiciels et de diffuser la sortie de ces derniers et le traiter.

Si PERL (pour la question ci-dessus), suivre ci-dessous 2 étapes pour définir et exécuter chemin script Perl de java

Étape 2 -. Le cas échéant, réglez-le sur l'environnement Chemin en utilisant le code java

Étape 3 -. Exécutez votre script perl

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top