Page 2 sur 2

Re: Créer un raccourci sur le bureau

Publié : mer. 18/juil./2018 21:00
par omega
@Falsam
Je suis vraiment désolé mais ça ne marche pas à tous les coups. Pour Purebasic.exe, ton exemple tel qu'il est, ça marche, c'est peut être un cas particulier. Voici une partie de mon code où ça bloque:

Code : Tout sélectionner

      
Chemin$=GetCurrentDirectory()+"Data\"
Idclient=0
Dbs$ = Chemin$+"client.db"
If Not OpenDatabase(Idclient, Dbs$, "", "")
   MessageRequester("Info", "Ouverture " + Dbs$ + " impossible!")
   End
EndIf
Mon application s'appelle Pctrav.exe (qui contient ce code ci-dessus), elle se trouve dans ce chemin:
d:\Pctrav\Pctrav.exe, j'ai donc 2 fichiers dans ce même dossier: (pctrav.exe + un sous-dossier nommé Data qui contient mes bases de données)
Mon application fonctionne très bien (depuis longtemps d'ailleurs). Quand je lance mon application là où elle se trouve, ça marche bien. Si je créé un raccourci de mon application manuellement, et que je lance mon programme à partir de mon raccourci, ça marche bien comme prévu. Mais quand j'utilise ton code pour créer un raccourci, le raccourci est créé mais il ne fonctionne pas. Voici le message qui s'affiche:
Ouverture c:users\MonPc\Desktop\Data\Client.db impossible ! \
Qu'en pensez-vous?
Merci

Re: Créer un raccourci sur le bureau

Publié : jeu. 19/juil./2018 8:56
par Marc56
omega a écrit :@Falsam
Je suis vraiment désolé mais ça ne marche pas à tous les coups. Pour Purebasic.exe, ton exemple tel qu'il est, ça marche, c'est peut être un cas particulier. Voici une partie de mon code où ça bloque:

Code : Tout sélectionner

      
Chemin$=GetCurrentDirectory()+"Data\"
Idclient=0
Dbs$ = Chemin$+"client.db"
If Not OpenDatabase(Idclient, Dbs$, "", "")
   MessageRequester("Info", "Ouverture " + Dbs$ + " impossible!")
   End
EndIf
Mon application s'appelle Pctrav.exe (qui contient ce code ci-dessus), elle se trouve dans ce chemin:
d:\Pctrav\Pctrav.exe, j'ai donc 2 fichiers dans ce même dossier: (pctrav.exe + un sous-dossier nommé Data qui contient mes bases de données)
Mon application fonctionne très bien (depuis longtemps d'ailleurs). Quand je lance mon application là où elle se trouve, ça marche bien. Si je créé un raccourci de mon application manuellement, et que je lance mon programme à partir de mon raccourci, ça marche bien comme prévu. Mais quand j'utilise ton code pour créer un raccourci, le raccourci est créé mais il ne fonctionne pas. Voici le message qui s'affiche:
Ouverture c:users\MonPc\Desktop\Data\Client.db impossible ! \
Qu'en pensez-vous?
Merci
Ton application tente d'ouvrir la base de données dans Chemin$
et
chemin est composé de Chemin$=GetCurrentDirectory()+"Data\"
S'il ne trouve pas, c'est que le répertoire actuel n'est pas bien positionné
Tu peux vérifier en cours de programme en ajoutant un debug
Dbs$ = Chemin$+"client.db"
Debug Dbs$

Si tu veux utiliser GetCurrentDirectory() depuis un programme lancé par un lien, il faut que ce lien contienne bien le chemin de démarrage (WorkingDirectory) "Démarrer dans:"

Re: Créer un raccourci sur le bureau

Publié : jeu. 19/juil./2018 9:37
par falsam
C'est de ma faute. Il manque le dossier d'exécution de l'application.

Voici les quelques modifications à effectuer avec le code que j'ai proposé initialement.

Ligne 5 : Ajout d'une variable mémorisant le dossier de l'application.
Global Application.s, LinkFileName.s, LinkName.s, WorkDirectory.s
Ligne 10 on mémorise le dossier de l'application
;Nom de l'executable : Exemple Demo.exe
Application = "D:\Purebasic Project\test1\demo.exe"

WorkDirectory = GetPathPart(Application)
Ligne 19 : On invoque la création du raccourci de l'application.
;Création du raccourci sur le bureau
If createShellLink(Application, LinkFileName, "", LinkName, WorkDirectory, Application, 0) = 0
   MessageRequester("Information", "Le raccourci est crée sur le bureau", #PB_MessageRequester_Ok)
EndIf
Le code que j'ai proposé est mise à jour.
https://www.purebasic.fr/french/viewtop ... 87#p199987

Re: Créer un raccourci sur le bureau

Publié : jeu. 19/juil./2018 12:57
par omega
Bonjour
@Marc56
J'ai bien précisé que mon application fonctionne très bien (depuis plus de 8 mois), je n'ai donc pas besoin de tester l'existence du dossier Chemin$ puisque je n'ai aucun problème de ce côté là. Il semble que tu n'as pas bien compris mon problème.
@Falsam
Je crois que ce que tu viens de proposer est justement l'instruction manquante, je vais mettre à jour le code et retester encore une fois. J'espère que cette fois, ça va marcher. Merci encore Falsam de ton aide.
Je te ferais signe après le test.
A+

[RESOLU] Créer un raccourci sur le bureau

Publié : jeu. 19/juil./2018 13:13
par omega
@Falsam
ça marche ! Merci beaucoup Falsam, tu es un vrai génie !
Bonne continuation !

Re: Créer un raccourci sur le bureau

Publié : jeu. 19/juil./2018 13:35
par Marc56
J'ai bien précisé que mon application fonctionne très bien (depuis plus de 8 mois), je n'ai donc pas besoin de tester l'existence du dossier Chemin$ puisque je n'ai aucun problème de ce côté là. Il semble que tu n'as pas bien compris mon problème.
Il me semble que tu n'as pas bien lui ma réponse jusqu'au bout, ni compris qu'un lien ne fonctionne pas comme le lancement direct d'un fichier
Si tu veux utiliser GetCurrentDirectory() depuis un programme lancé par un lien, il faut que ce lien contienne bien le chemin de démarrage (WorkingDirectory) "Démarrer dans:"
C'est exactement ce que t'a expliqué Falsam ensuite en te faisant ajouter WorkDirectory
Global Application.s, LinkFileName.s, LinkName.s, WorkDirectory.s
Il manquait le dossier d'exécution de l'application.

En faisant un Debug pour afficher le chemin en cours, tu aurais tout de suite vu que ton programme se lançait bien, mais le chemin "en cours" n'était pas forcément celui de l'exe

Regarde les propriétés d'un lien sur le bureau par exemple, il y a
- Cible:
- Démarrer dans:

[edit] Si tu ne renseignes pas "Démarrer dans:" alors ton exe se lance bien, mais le programme ne change pas de répertoire pour la suite.
Si tu fais un raccourci par l'assistant Windows, alors il met en cible le répertoire de l'EXE, donc dans ton cas, cela fonctionnait, mais si tu créé ce lien toi-même, alors "Démarré dans" doit être renseigné

Quand tu renseignes ce champs, c'est comme si tu faisait un batch avec
- CD chemin
- programme

Cliquer sur un lien n'est pas la même chose que cliquer directement sur l'EXE
Quand tu clique sur un EXE (dans l'explorer ou le menu windows), Windows va implicitement changer le répertoire en cours pour toi, donc c'est normal que cela fonctionne.

Debug et le Visualiseur de variables sont des outils indispensables.
Ajoute ShowVariableViewer() dans ton programme et clique sur rafraichir dès que quelque chose te semble bizarre, tu verra ce que contiennent tes variables.
Ou alors, met un point d'arrêt à la fin du programme puis passes le curseur souris sur le code: tu verras en tooltip le contenu de chaque variable

D'ailleurs tu vois bien dans ton propre message d'erreur que ton programme tente d'ouvrir la base dans un sous répertoire du bureau (Desktop)
Ouverture c:users\MonPc\Desktop\Data\Client.db impossible !
Alors que tu indique que le dossier de donnée est dans un sous répertoire de d:\Pctrav\Pctrav.ex
d:\Pctrav\Pctrav.exe, j'ai donc 2 fichiers dans ce même dossier: (pctrav.exe + un sous-dossier nommé Data qui contient mes bases de
PS. Mais je dois quand même reconnaitre que Falsam explique toujours bien plus proprement :P