Detectar si un determinado software está instalado en la máquina del usuario en Java

StackOverflow https://stackoverflow.com/questions/1354186

  •  20-09-2019
  •  | 
  •  

Pregunta

Tengo una aplicación Java que requiere cierto tipo de software (una de ellas es Perl) antes de que pueda ser ejecutado. Lo que solía hacer para detectar para Perl es:

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

y si había una IOException declarar que no había Perl.

Sin embargo, uno de mis usuarios se quejaron de que la aplicación están fracasando porque no había colocado Perl en su camino varible. Así que esta es la razón por lo que pido:? ¿Hay alguna forma de sistema operativo múltiple para detectar si Perl (o cualquier otro software) está instalado en el sistema del usuario y la ruta de acceso al programa

¿Fue útil?

Solución

No sé su público objetivo (usuarios), pero en caso de fallo que podría pedir al usuario que introduzca la ruta (una FileChooserDialog) y luego almacenar este camino para uso futuro (si la excepción no se tira de nuevo). Lo hice ya hace algún tiempo, por suerte yo tenía los usuarios que eran administradores de sistemas, así que estaba bien para ellos para proporcionar esa información cuando el error ocurrió la primera vez (también he documentado cómo actualizar o cambiar estos valores en un archivo de propiedades).

Otra opción como se ha mencionado por Don, es instalar el software necesario como relativo a la instalación, que es una opción más común.

Otros consejos

Este tipo de preguntas parecen estar haciendo estallar hacia fuera de vez en cuando y la respuesta (casi) Siempre hay. La mayor razón general por la respuesta negativa es que Java se ejecuta en un entorno de máquina virtual homogéneo que es por diseño el mismo en todas las plataformas; Aquellas operaciones que no pueden abstraer / no fiable por lo menos en las plataformas más apoyados simplemente no se puede hacer fácilmente. La detección de eventos externos en el sistema operativo en general, tales como las aplicaciones que no son de Java también se ejecutan / instalado cae en que "no es fácil de hacer" categoría.

Es cierto que podría haber necesidad / mercado de las bibliotecas JNI para el propósito, pero los novillo en gran medida de la multiplataforma requisito estas preguntas siempre parecen querer y por eso la respuesta corta es "no" . Por lo que yo puedo ver, lo que está haciendo actualmente es la forma más limpia para detectar Perl menos que esté dispuesto a incluir perljvm o similar en su proyecto.

Si el usuario no está dispuesto a cualquiera

  • Instalar Perl en un lugar acordado
  • Indique dónde Perl se ha instalado mediante el almacenamiento de su ubicación en una variable de entorno, el archivo de configuración, registro de las ventanas, etc.

entonces parece que eres única opción es buscar en el disco entero para un ejecutable llamado 'Perl'. Obviamente, esto podría llevar mucho tiempo, pero si almacena la ubicación en alguna parte, por lo menos usted sólo tendrá que buscar una vez

Obtener información de ventanas nativo utilizando el SDK de Java no es posible sin el apoyo de APIs externas. En lugar de utilizar las API externas (que es en su mayoría con licencia LGPL y no completamente abierto), podemos utilizar los comandos de la cáscara para obtener el mismo.

Paso 1 - Comprobación de si (Perl) se instala una aplicación

Para comprobar si se ha instalado una aplicación, utilice ProcessBuilder o Runtime.exec para ejecutar uno de los siguientes comandos de PowerShell,

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

Reemplazar "perl" con su elección de software y corriente a la salida de estos y procesarla.

Si Perl (para la pregunta anterior), siga por debajo de 2 pasos para establecer la ruta y ejecutar java script en perl de

Paso 2 -. Si está disponible, ponerlo en ruta del entorno utilizando el código de Java

Paso 3 -. Ejecutar el script de perl

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top