Répertoire courant

seareal Messages postés 24 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 8 juin 2011 - 16 juin 2006 à 10:15
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 - 16 juin 2006 à 17:09
Bonjour,

je suis pas sûr que ma question soit adéquate sur ce forum mais je tente ma chance.

voilà le problème :
j'ai créé une petite application java qui doit écrire des fichiers logs. J'ai exporté mon appli en .jar puis en .exe et je lui ai créé un installeur. L'objectif de l'installeur est d'associer une url de type bonzai:// à mon application (un peu comme ed2k pour emule).

Pour l'instant, l'installeur n'est que pour Windows : il associe l'url bonzai à mon application dans la base de registre en utilisant les clés :

[bonzai]
   [shell]
      [command]   >> par défaut >> C:\Program Files\Mon Appli\MonAppli.exe %1

L'association en elle-même fonctionne, mon programme est bien lancé, le problème est qu'il est lancé depuis le répertoire du bureau et non depuis son répertoire d'installation (System.getProperty("user.home") renvoie systématiquement mon bureau). Du coup, mes fichiers de logs sont enregistrés sur le bureau au lieu d'être enregistrés dans le répertoire de l'application.

J'ai bien trouvé une solution qui consiste à ajouter une clé dans la base de registre par l'installeur dans laquelle je spécifie le path de l'appli, puis je vais lire cette clé depuis mon programme mais je n'aime pas vraiment cette solution qui fait que mon appli devient spécifique windows (et que je ne trouve pas ça propre de toute façon).

J'en viens donc à ma question

Y'a-t-il un moyen en java de désigner le répertoire où se trouve physiquement l'application (pas forcément celui depuis lequel elle est lancée) ?
Y'a-t-il sinon un moyen de spécifier un répertoire de départ dans la base de registre pour lancer mon appli ?

(un peu comme les raccourcis windows où on spécifie la "cible" et le "démarrer dans", c'est ce "démarrer dans" que j'aimerais spécifier dans ma base de registre).

Merci d'avoir tout lu, j'espère que vous avez une solution

12 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
16 juin 2006 à 10:27
System.getProperty("user.dir");





Renfield





Admin CodeS-SourceS

- MVP Visual Basic
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
16 juin 2006 à 10:28
(trouvé sur Codyx.org, le dernier né de la famille CodeS-SourceS)

http://codyx.org/snippet_dossier-courant-exe-cours-execution_4_l_java_21.aspx

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
seareal Messages postés 24 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 8 juin 2011
16 juin 2006 à 10:36
Autant pour moi je me suis trompé dans mon message initial, "user.home" n'est évidemment d'aucune utilité, c'était bien la variable "user.dir" qui renvoyait sur le bureau.

Je précise que le problème ne survient évidemment pas si je lance mon appli depuis son répertoire (ou via la commande Exécuter de windows) où là, je suis bien placé dans le bon répertoire.

Ce problème ne survient que lorsque mon appli est automatiquement lancée par Internet Explorer lorsqu'il reçoit une url de type bonzai://Test au lieu de http://.....).

Pour je ne sais quelles raisons, le répertoire courant dans mon application est le bureau, et ce que je voudrais changer
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
16 juin 2006 à 10:42
ok, ok, je vois le soucis
user.dir renvoie le repertoire courant.... mais n'a tout bonnement aucun lien avec l'executable...

(je viens de désactiver le Snippet)

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
seareal Messages postés 24 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 8 juin 2011
16 juin 2006 à 12:30
Si vous avez des idées pour obtenir l'information en Java, ou si vous connaissez un bon site qui expliquerait comment modifier correctement la base de registre (pas faute d'en avoir cherché pourtant ), je suis preneur
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
16 juin 2006 à 12:42
Salut,


en java pure il est IMPOSSIBLE de modifier la base de registre qui est exclusif à crosoft

cependant tu as 2 façon de le faire mais en utilisant ca ton appli ne
sera plus portable donc plus aucune raison d'utiliser java (le mieux
pour ca reste vb ou c# qui sont adapté a crosoft)


1 - tu developpe un lib dynamique (en c/c++) qui va manipuler la base de registre

2 - tu recupère je ne sais plus qu'elle api pour la manipulation de la base de registre


sinon en java pure tu as la class File qui permet de customizer le
repertoire de traivail ou encore si tu utilise la commande exec de la
class Runtime tu peux aussi customizer le repertoire de travail.

WORA
0
seareal Messages postés 24 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 8 juin 2011
16 juin 2006 à 13:57
à l'heure actuelle je crée une nouvelle variable dans la base de registre dans laquelle je met le répertoire d'installation et je vais ensuite la rechercher via Preferences.userRoot().node(

"Mon Appli");

ça fonctionne bien mais c'est justement ce que je ne veux pas faire (rendre l'appli spécifique à un sytème). Je vais regarder les classes que tu m'as spécifié mais j'imagine que je ne trouverai pas la méthode qui va bien en Java.

Je pense que je vais plutot poser ma question sur un forum spécifique base de registre (si je trouve ça ) pour régler le problème à la base : lancer correctement mon appli depuis son répertoire de travail.

Merci néanmoins pour vos réponses
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
16 juin 2006 à 15:38
bizarre quand meme ton probleme
avec quoi as tu cree ton exe ?

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
seareal Messages postés 24 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 8 juin 2011
16 juin 2006 à 15:53
J'avoue que j'y connais pas grand chose (pour ne pas dire rien) sur l'étape entre le .jar et le .exe.

J'ai utilisé JSmoothGen avec les paramètre suivants :
Skeleton Chooser : Windowed Wrapper (je suppose que c'est celui à utiliser pour une appli graphique)

Executable : MonAppli.exe
Executable Icon: vide
Current Directory : vide (j'ai cru comprendre justement qu'il ne fallait rien y mettre)

puis mon jar et la classe main.

Je n'ai pas touché au reste.

Je précise bien que le .exe que je crée sera ensuite utilisé par un installeur qui doit permettre à l'utilisateur de spécifier n'importe quel répertoire évidemment.
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
16 juin 2006 à 16:16
et comment tu specifies le path des fichier log ?

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
seareal Messages postés 24 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 8 juin 2011
16 juin 2006 à 16:53
dans l'idéal, j'aimerais faire ça

private
final String
logClient =
"./logClient.txt";

PrintWriter log = new PrintWriter (
new FileWriter(
logClient,
true));

pour le moment je remplace la première ligne par :
private

Preferences
lPrf = Preferences. userRoot ().node(
"MonAppli");

private String
repInstall =
lPrf.get(
"Path",
"" ); // Récupération d'une valeur insérée dans la base de registre par l'installeur

private
final String
logClient =
repInstall + File.
separator +
"logClient.txt";
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
16 juin 2006 à 17:09
ca me parait correct a premiere vu
ton exe il se trouve ou?

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
Rejoignez-nous