Erkennen, wenn bestimmte Software auf dem Computer eines Benutzers in Java installiert ist

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

  •  20-09-2019
  •  | 
  •  

Frage

Ich habe eine Java-Anwendung, die bestimmte Software benötigt (einer von ihnen Perl), bevor sie ausgeführt werden können. Was habe ich zu tun, für Perl zu erkennen ist:

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

und wenn es eine IOException declare, dass es kein Perl.

Allerdings ist einer meiner Benutzer darüber beschwert, dass die App Fehler gehalten, weil er Perl auf seinem Weg varible nicht gestellt hatte. Das ist also fragen, warum ich: Gibt es eine Cross-Betriebssystem Art und Weise zu erkennen, ob Perl (oder jede andere Software) auf dem System des Benutzers installiert ist und der Pfad zu dem Programm

?
War es hilfreich?

Lösung

Ich weiß nicht, Ihre Zielgruppe (Benutzer), aber bei einem Ausfall können Sie den Benutzer auffordern, den Pfad (a FileChooserDialog) und dann speichern Sie diesen Weg für die künftige Nutzung geben (wenn die Ausnahme nicht wieder ausgelöst wird). Das habe ich vor einiger Zeit, zum Glück hatte ich Benutzer, die Systemadministratoren waren, so ist es in Ordnung war für sie, dass Informationen zur Verfügung zu stellen, wenn der Fehler das erste Mal passiert (ich auch dokumentiert, wie zu aktualisieren oder diese Werte in einer Eigenschaftendatei ändern).

Andere Option wie Don erwähnt, ist die erforderliche Software wie in Bezug auf Ihre Installation zu installieren, die eine gemeinsame Option ist.

Andere Tipps

scheint diese Art von Fragen ab und zu, und die Antwort herausspringen wird (fast) ist immer nein. Allgemeinste Grund für die negative Antwort ist, dass Java in einer homogenen Virtual Machine-Umgebung ausgeführt werden, die durch Design ist das gleiche auf allen Plattformen; Diese Vorgänge können Sie nicht abstrahieren / do zuverlässig auf zumindest die unterstützten Plattformen können einfach nicht einfach durchgeführt werden. Erkennen von externen Ereignissen in den OS im Allgemeinen wie die Nicht-Java-Anwendungen werden auch ausgeführt / installiert fällt in die Kategorie „nicht einfach zu tun“.

Sicherlich könnte es notwendig / Markt für JNI-Bibliotheken zum Zweck sein, aber diejenigen Steer stark von der Cross-Plattform Anforderung dieser Fragen scheinen immer zu wollen und deshalb die kurze Antwort „nein“ ist . Soweit ich sehen kann, zur Zeit, was Sie tun, ist der sauberste Weg Perl zu erkennen, es sei denn, Sie sind bereit, perljvm oder ähnliches in Ihrem Projekt.

Wenn der Benutzer nicht bereit ist zu beiden

  • Installieren Perl in einem nach Standort vereinbart
  • Geben Sie wo perl es Standort in einer Umgebungsvariablen, Konfigurationsdatei installiert wurde durch Speicher, Windows-Registry, etc.

dann scheint es, du bist nur die Möglichkeit, die gesamte Festplatte für eine ausführbare Datei suchen namens ‚Perl‘. Offensichtlich könnte dies eine sehr lange Zeit in Anspruch nehmen, aber wenn Sie den Speicherort irgendwo speichern, zumindest sollten Sie nur einmal suchen müssen

Erste native Windows-Informationen Java SDK ist nicht möglich, ohne Unterstützung von externen APIs. Anstelle von externen APIs (die meist LGPL lizenziert und nicht ganz geöffnet ist), können wir die Shell-Befehle verwenden, um das gleiche zu bekommen.

Schritt 1 - Überprüfen, ob (Perl) eine Anwendung installiert ist,

Für die Überprüfung, ob eine Anwendung installiert ist, verwenden Process oder Runtime.exec eine der folgenden Powershell-Befehl auszuführen,

Get-ItemProperty HKLM \ Software \ Microsoft \ Windows \ Currentversion \ Uninstall * | Select-Object Display | where {$ _. Display -match "perl"}

Ersetzen „perl“ mit Ihrer Wahl der Software und streamen die Ausgabe von diesen und sie verarbeiten.

Wenn PERL (für obige Frage), unter 2 Schritten Satz Pfaden folgen und läuft Perl-Skript von Java

Schritt 2 -. Falls verfügbar, setzen Sie sich auf Umgebungspfad von Java-Code mit

Schritt 3 -. Führen Sie Ihre Perl-Skript

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top