Shellexecute fichier existant non trouvé

Herve_be Messages postés 1017 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 25 avril 2024 - 22 déc. 2019 à 11:15
Herve_be Messages postés 1017 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 25 avril 2024 - 24 déc. 2019 à 16:00
Bonjour,
Je vérifie qu'un fichier existe bien avant de l'exécuter
sFullPath = "E:\ReefTools\RVRTupgrade.exe"
Dim oFile As New Scripting.FileSystemObject
If oFile.FileExists(sFullPath) Then
lngReturn = ShellExecute(Me.hwnd, vbNullString, sFullPath, vbNullString, App.Path, SW_SHOWNORMAL)
je reçois lngReturn = 2 : file not found !
Quelle peut-être la raison de ce comportement bizarre ?

6 réponses

vb95 Messages postés 3474 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 7 mai 2024 169
Modifié le 22 déc. 2019 à 13:39
Bonjour
Si ton exécutable existe bien ici
If oFile.FileExists(sFullPath)
celui-ci nécessite peut-être un fichier en paramètre ou App.Path est incorrect à la ligne qui suit .

L'exécutable a l'air d'être un programme pour mettre à jour un fichier : celui-ci existe-t-il et est-il au bon emplacement ?

De plus pourquoi vbNullString ? Il faut ouvrir ton exécutable : "Open" serait plus approprié .


0
Herve_be Messages postés 1017 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 25 avril 2024 2
Modifié le 22 déc. 2019 à 18:21
Merci pour ta réponse,
sFullPath = App.Path & "\RVRTupgrade.exe".
Il s'agit en effet d'un utilitaire de mise à jour, il ne nécessite pas de paramètre.

Le but est de faire une mise à jour automatique : mon logiciel RVReefTools.exe va voir sur Internet sil y a une version plus récente, auquel cas, puisqu'il ne peut pas écraser l'exe qui tourne, il télécharge RVRTupgrade.exe, le lance puis s'arrête.
RVRTupgrade.exe télécharge la version plus récente de RVReefTools.exe, le démarre puis s'arrête.

J'utilise Shellexecute - Open pour ouvrir un fichier, par exemple une page Internet ou un pdf avec une application; ici je veux exécuter le fichier d'où vbNullString.

J'aurais du préciser que 99 fois sur 100 tout fonctionne parfaitement, mais pas chez certains utilisateurs, je ne comprends pas pourquoi.
0
JeuDuTaquin Messages postés 249 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 2023 7
23 déc. 2019 à 00:52
Salut Hervé,

sFullPath = "E:\ReefTools\RVRTupgrade.exe" 

Suppose que tous ont installés l'application de mise à jour en "E:".

Il est impossible de savoir si ce lecteur est présent.
De plus, le système attribue un nom de lecteur "libre" qui va dépendre de la configuration de l'utilisateur.

Dans tous les cas, il faut utiliser des paths relatifs ou tester plusieurs lecteurs (C,D,E ou F), si ton application se trouve sur un disque dur, sur un lecteur CD virtuel ou une carte USB.

Donc, la racine "App.path" donne un répertoire physique existant.
Dans le cas contraire, tu spécules sur la présence d'un programme qui n'existe seulement dans ta configuration personnelle.
Et utiliser un fichier executable externe est très risqué, si le fichier n'est pas diffusé avec le programme.

Version différente, configuration matérielle, anti-virus et préférences utilisateurs, seront là pour embrouiller les appels et les retours de fichiers.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
23 déc. 2019 à 01:12
"open" je dirai ; même chose.

doit etre lié a un Windows recent (store toussa)
0
Herve_be Messages postés 1017 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 25 avril 2024 2
Modifié le 23 déc. 2019 à 11:41
Merci mais c'est fatalement le même répertoire.
"E:\ReefTools\RVRTupgrade.exe" est un exemple

Le programme s'appelle RVReefTools.exe et se trouve fatalement dans App.Path
il vérifie que RVRTupgrade.exe se trouve bien dans App.Path
si ok Shellexecute App.Path & "\RVRTupgrade.exe" donne la plupart du temps un code 0 = OK
mais de temps en temps un code 2 = not found : comment ce fait-ce ?
0

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

Posez votre question
JeuDuTaquin Messages postés 249 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 2023 7
Modifié le 23 déc. 2019 à 20:59
Salut Hervé,

Non, le code 2 n'est pas nécessairement la non-présence du fichier cible.

Ce code indique une erreur d'ouverture de fichier, avec soit un niveau de d'accès insuffisant sous Windows, un blocage de l'antivirus (accès réseau non manuel), un canal réseau bloqué (firewall) ou tout bêtement un rapport d'échec de démarrage si le programme a déjà été lancé précédemment.

Imagine que l'utilisateur lance deux cessions de ton programme… la seconde ouverture lancera sa mise à jour alors qu'elle fonctionne déjà.

Il faut que tu lances ta mise à jour deux fois de suite, pour voir si deux tâches différentes sont possibles… si le programme est à cession unique, le code -2 sera affiché lors de sa deuxième execution.

Dans tous les cas, demande aux utilisateurs de modifier les préférences d'accès du fichier "exe" en le paramétrant en "Accès Administrateur" (à chaque lancement).

Si cela ne fonctionne pas, un répertoire "hors" répertoires protégés serai plus judicieux.
Il suffit d'installer ton programme en "c:\monprogramme" et non dans le "Program files" qui, comme Renfield l'a souligné, est redirigé vers des répertoires miroirs, car certaines applications sont parfois à la peine avec des répertoires exotiques, et ne redirigent pas les bons paths.

Sur W7, il te faut installer l'"exe" esclave en même temps, car si le fichier est déplacé, copier ou installé dans le répertoire "App.path", le fichier ne sera pas copier dans le bon répertoire… il peut même y avoir des doublons dans le même répertoire… celui d'origine et celui en miroir (option compatibilité).
0
Herve_be Messages postés 1017 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 25 avril 2024 2
24 déc. 2019 à 16:00
Merci pour les autres significations possibles du code 2.

Je suggère déjà aux utilisateur d'installer le programme dans un répertoire dédié.
Ceux qui l'installent par exemple dans C:\users... ou C:\Program files ... ou quand l'anti-virus ou le firewall sévit reçoivent un code 5 = The operating system denied access to the specified file.

Avant d'exécuter l'esclave l'exe principal le télécharge puis vérifie sa présence, l'esclave est donc à ce moment là fatalement dans le même répertoire.
0
Rejoignez-nous