Italian [B4J] Ma File.DirApp cosa dovrebbe indicare esattamente?

amorosik

Expert
Licensed User
Ho una procedura realizzata con B4J per l'invio notifiche push usando Firebase Cloud Messaging, la procedura si chiama PIPPO.JAR
Questa procedura dispone di un file per la propria configurazione PIPPO.INI, dove tra le altre cose e' scritto il server key per necessario per l'invio verso i sistemi Firebase
Il file ini se non presente all'avvio viene creato automaticamente col seguente codice

B4X:
   'Check if the settings file exists, else create a new file
    Public  Ini_File As String = "pippo.ini"

    If File.Exists(File.dirapp, Ini_File) Then
        SettingsMap = File.ReadMap(File.DirApp, Ini_File)
        Else
        'Create a new map and save
        SettingsMap = CreateMap ("Creazione": DateTime.date(DateTime.now))
        File.WriteMap(File.DirApp, Ini_File, SettingsMap)
        End If

Stessa cosa per un file PIPPO.TXT che uso per passare i comandi da programma esterno alla procedura jar, se non presente viene creato e scritta riga iniziale 'Creazione:...'
Allora, se avvio il tutto da ide funziona tutto come atteso (almeno come mi attendo io), sia il file pippo.ini che il file di testo pippo.txt vengono creati/letti dalla directory dov'e' il jar (quella che dovrebbe essere la File.DirApp dentro al codice)
Una volta completato il programma, per avviare in esecuzione il jar uso un file pippo.bat con dentro 'java -jar c:\dev\superprogetto_xyz\pippo.jar'
Pippo.bat e' nella stessa directory di pippo.jar
Il problema sta nel fatto che quando da sistema operativo doppio-clicco su pippo.bat mi aspetterei che il jar venga eseguito e quindi se mancanti il pippo.ini e pippo.txt se li autocrei
Niente, me li crea dentro c:\users\user1\document
Mentre se doppio-clicco direttamente su pippo.jar sia il file pippo.ini che il file pippo.txt me li autocrea correttamente nella stessa directory di pippo.jar
Quindi quel File.DirApp dentro al codice in realta' non indica la directory dove e' attualmente il jar
Windows 10 pro
Allora qua o c'e' un errore oppure c'e' uno sbaglio, una delle tre
La domanda finale quindi e': com'e' sta storia che quando avvio il file batch il malefico pippo.jar considera la File.DirApp = c:\users\user1\document ?
 

LucaMs

Expert
Licensed User
Longtime User
La domanda finale quindi e': com'e' sta storia che quando avvio il file batch il malefico pippo.jar considera la File.DirApp = c:\users\user1\document ?
Vado ad intuito. Probabilmente li crea nei documenti utente perché nel percorso dal quale viene lanciato il bat non trova il jar (fai una prova, solo per "curiosità": metti il file bat di lancio del jar nella stessa cartella di quest'ultimo - senza modificarlo).

Puoi risolvere facendo creare o copiare i tuoi .txt direttamente dal bat.
 

LucaMs

Expert
Licensed User
Longtime User
Ho fatto io una prova; ho messo il file bat che lancia il jar dentro una cartella che sta sul Desktop. Il jar sta direttamente sul Desktop ed è quindi là che dovrebbe creare il mio file txt, invece lo crea nella cartella del bat, non in quella dei documenti utente.

P.S. Confermo. Lanciato il bat da un'altra posizione, il txt viene creato nella stessa cartella in cui si trova il bat, che evidentemente viene considerato il sw vero e proprio (DirApp).
 
Last edited:

amorosik

Expert
Licensed User
Ringrazio molto per l'interessamento al problema
Si in effetti nella foga di descrivere il problema ho dimenticato un dettaglio importante
Il file .bat in realta' viene lanciato dall'interno di una procedura Access

dummy = Shell(Application.CurrentProject.Path & "\pippo.bat", vbMinimizedNoFocus)

In questo modo (pippo.bat e pippo.jar nella stessa directory) i file che pippo.jar crea all'avvio me li crea in c:\users\user1\document
Forse ho dato per scontato che avviando a mano il file bat avrebbe dato gli stessi risultati, mi scuso per l'imprecisione
 
Top