Domanda

Ho un'applicazione Java che richiede determinati software (uno dei quali è Perl) prima di poter essere eseguita.Quello che facevo per rilevare Perl è:

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

e se c'era una IOException dichiara che non c'era Perl.

Tuttavia, uno dei miei utenti si è lamentato del fatto che l'app continuava a fallire perché non aveva inserito Perl nel suo percorso variabile.Quindi è per questo che chiedo:Esiste un modo tra sistemi operativi per rilevare se Perl (o qualsiasi altro software) è installato sul sistema dell'utente e il percorso del programma?

È stato utile?

Soluzione

Non so il pubblico di destinazione (gli utenti), ma in caso di errore si potrebbe chiedere all'utente di inserire il percorso (un FileChooserDialog) e quindi memorizzare questa strada per un utilizzo futuro (se l'eccezione non è gettato di nuovo). Ho fatto che qualche tempo fa, per fortuna ho avuto gli utenti che sono stati amministratori di sistema, quindi era ok per loro di fornire queste informazioni quando l'errore è accaduto la prima volta (ho anche documentato come aggiornare o modificare questi valori in un file di proprietà).

Altri opzione come menzionato da Don, è quello di installare il software richiesto come relativo alla propria installazione, che è una scelta più comune.

Altri suggerimenti

Questo tipo di domande sembra essere saltar fuori ogni tanto e la risposta (quasi) sempre è no. La maggior ragione generale per la risposta negativa è che Java è gestito in un ambiente di Virtual Machine omogenea, che è di progettazione la stessa su tutte le piattaforme; Tali operazioni non si può astrarre / non in modo affidabile su almeno piattaforme più supportate solo non può essere fatto facilmente. Rilevamento eventi esterni nel sistema operativo, in generale, come ad esempio quali applicazioni non-Java sono anche eseguire / installato cade in quel "non facile da fare" categoria.

Certo ci potrebbe essere bisogno / di mercato per le librerie JNI per lo scopo, ma quelli sterzare pesantemente dalla cross-platform requisito queste domande sembrano sempre voler ed è per questo che la risposta breve è "no" . Per quanto posso vedere, quello che stai facendo attualmente è il modo più pulito per rilevare Perl meno che non siate disposti a includere perljvm o simili nel progetto.

Se nemmeno l'utente è disposto a farlo

  • Installa perl in una posizione concordata
  • Indica dove è stato installato perl memorizzando la sua posizione in una variabile di ambiente, file di configurazione, registro di Windows, ecc.

allora sembra che l'unica opzione sia quella di cercare nell'intero disco un eseguibile chiamato "Perl".Ovviamente questo potrebbe richiedere molto tempo, ma se memorizzi la posizione da qualche parte, almeno dovresti cercarla solo una volta

Come finestre informazioni native usando Java SDK non è possibile senza il supporto di API esterne. Invece di utilizzare API esterne (che principalmente LGPL licenza e non completamente aperta), possiamo utilizzare i comandi shell per ottenere lo stesso.

Fase 1 - Verificando (Perl) l'installazione di un'applicazione

Per controllare se è installata un'applicazione, utilizzare ProcessBuilder o Runtime.exec di eseguire uno dei seguenti comandi PowerShell

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

Sostituire "perl" con la vostra scelta di software e lo streaming l'uscita di questi e di processo.

Se PERL (per sopra domanda), che seguono relative a 2 passi per impostare il percorso ed eseguire script perl da Java

Fase 2 -. Se disponibile, impostarla su ambiente del percorso utilizzando il codice Java

Fase 3 -. Eseguire lo script perl

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top