Italian community of Lazarus and Free Pascal
Programmazione => Generale => Topic aperto da: Stefano - Giugno 04, 2012, 03:42:47 pm
-
ho bisogno di trovare il path di un'eseguibile (non e' detto sia installato nel path predefinito)
es: firefox, o swriter di OpenOffice.
sPath := ExtractFilePath('firefox');
o
sPath := ExtractFilePath('firefox.exe');
mi ritorna sempre il path della unit dove risiede il codice
mentre dovrebbe restituire /usr/bin/firefox
ShowMessage( 'path = ' + sPath);
visualizza sempre sPath vuoto
-
ExtractFilePath estrae il percorso da un valore in ingresso che *contiene* (anche) il percorso ;)
in pratica la chiamata dovrebbe essere:
sPath := ExtractFilePath('/usr/bin/firefox/firefox');
ma il problema è proprio che non si conosce '/usr/bin/firefox' :)
purtroppo non so come si potrebbe ottenere la path di installazione di un'eseguibile, la prima cosa che mi viene in mente per linux è il comando: whereis
-
Utilizzare un EXPAND prima di un EXTRACT?
Fattibile?
-
leggi questo documento, dovrebbe risolvere il problema, ciao Brunello
http://wiki.lazarus.freepascal.org/Multiplatform_Programming_Guide#On_Unix_there_is_no_.22application_directory.22
-
potrei anche usare "wich" , ma:
wich firefox -> usr/bin/firefoc
wich vlc -> ure-bin/vlc
wich swriter -> nessun path
vlc e firefoc sono classificati Programma
swriter e' classificato Script (anche se con doppio click si avvia)
-
immagino che comunque non ti interessi l'applicazione di default?
nel senso che, ad esempio per internet, vuoi proprio firefox e non il default browser?
-
non e' firefox o altro browser, il problema;
ma dare la possibita' all'utente di scegliere quello che vuole.
ed essendo l'utente non uno smatettone, ma uno che usa il pc in modo passivo, cercavo un modo di farlo in automatico.
chiaro poi che nel caso di Linux, firefox si trova su /usr/bin nel 99% dei casi, non credo che qualcuno si prenda la briga di spostarlo.
posso sempre fare un FileExists con il path convenzionale e se non trova il file, avvisare di configurare il Path dove e' stato messo il browser.
-
l'eseguibile si chiama soffice e si trova su /usr/bin
quindi which soffice resituisce /usr/bin
inoltre si puo' redirigere l'output su un file di testo
which soffice > esito.txt che sara' su /home<utente>/esito.txt
leggendo il file esito.txt ci sara' la certezza del path.
-
se le applicazioni da localizzare sono molte ti conviene provare con il which (unica invocazione per tutte le applicazioni da trovare) piuttosto che con FileExists, hai molta più probabilità di ottenere path valide ;)
se non vengono trovate potresti chiedere all'utente di trovarle e poi salvare il tutto in un file di configurazione
-
infatti e' la cosa piu' sicura;
al momento pero' non riesco ad eseguirlo
da terminale non ci sono problemi ad eseguire which, ma in lazarus non va, sempre "executable not found"
alcune prove senza redirect, giusto per vedere se lo esegue.
AProcess.CommandLine := '"/usr/bin/which"' + '" soffice"';
AProcess.CommandLine := '"/usr/bin/which soffice"';
in alternativa si protrebbe lanciare uno script da terminale, ma come si chiama il file del Terminale ?