Ligne de commande trop longue pour exécuter un shell [Résolu]

jdddeschamps 13 Messages postés jeudi 18 décembre 2008Date d'inscription 23 mars 2009 Dernière intervention - 23 mars 2009 à 11:38 - Dernière réponse : jdddeschamps 13 Messages postés jeudi 18 décembre 2008Date d'inscription 23 mars 2009 Dernière intervention
- 23 mars 2009 à 17:52
Horreur !

Je ne peux pas exécuter une commande shell car les noms de fichiers sont trop longs :

Shell App.Path & "\jetcomp.exe -src:" & Src & " -dest:" & Dest

Le fichier dest n'est pas créé. Or quand je regarde l'expression, je me rends compte qu'elle est trop longue :

"C:\Documents and Settings\Deschamps\Mes documents\Elam\VB6_2_4_3_2009_01_01\jetcomp.exe -src:C:\Documents and Settings\Deschamps\Mes documents\Elam\VB6_2_4_3_2009_01_01\BDD\ElamVB5.mdb -dest:C:\Documents and Settings\Deschamps\Mes documents\Elam\VB6__"

aïe aïe aïe, que vais-je devenir ?
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 23 mars 2009 à 14:35
3
Merci
ne devrais-tu pas encadrer les chemins avec des guillemets ?

pour le frmMidi.hwnd, c'est pas vraiement utile dans ton cas. (mettre 0)

Merci Renfield 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de Renfield
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 23 mars 2009 à 11:56
0
Merci
tu peux commencer par transformer tes chemins en chemins courts ...

"C:\Docume~1\..."

et tenter d'utiliser plutot ShellExectute
Commenter la réponse de Renfield
jdddeschamps 13 Messages postés jeudi 18 décembre 2008Date d'inscription 23 mars 2009 Dernière intervention - 23 mars 2009 à 12:38
0
Merci
je vais regarder dans l'aide comment utiliser des chemins courts
Commenter la réponse de jdddeschamps
jdddeschamps 13 Messages postés jeudi 18 décembre 2008Date d'inscription 23 mars 2009 Dernière intervention - 23 mars 2009 à 13:05
0
Merci
Je n'ose pas trop utiliser les noms courts car j'ai peur que ça ne marche pas avec les versions ultérieure de XP.

J'ai essayé shellexecute à plusieurs reprises (ce fut l'occasion de réinstaller l'excellent API-guide)

Src = App.Path & "\BDD\ElamVB5.mdb"
Dest = App.Path & "\BDD\ElamVB5compacte.mdb"
Backup = App.Path & "\BDD\back_up_ElamVB5.mdb"

FileCopy Src, Backup
'*******************Essai avec chemin complet
'ShellExecute frmMDI.HWnd, "open", App.Path & "\jetcomp.exe", _
'                "-src:" & Src & " -dest:" & Dest, App.Path, SW_SHOWNORMAL
'*******************Essai avec chemin relatif à app.path
ShellExecute frmMDI.HWnd, "open", App.Path & "\jetcomp.exe", _
                "-src:" & "\BDD\ElamVB5.mdb" & _
                " -dest:" & "\BDD\ElamVB5compacte.mdb", _
                App.Path, SW_SHOWNORMAL
'*******************Essai avec shell
'Shell App.Path & "\jetcomp.exe -src:" & Src & " -dest:" & Dest
FileCopy Dest, Src

Avec shell, ça ne marche pas, c'est normal, l'expression fait plus de 255 caractères
Avec shellexecute et chemin complet, ça ne marche pas ; c'est étonnant car l'expression de lpParameters ("-src:" & Src & " -dest:" & Dest) fait moins de 255 caractères.
Une erreur de syntaxe ?
Commenter la réponse de jdddeschamps
jdddeschamps 13 Messages postés jeudi 18 décembre 2008Date d'inscription 23 mars 2009 Dernière intervention - 23 mars 2009 à 14:24
0
Merci
J'ai essayé ceci :

Src = App.Path & "\BDD\ElamVB5.mdb"
Dest = App.Path & "\BDD\ElamVB5compacte.mdb"

erreur = ShellExecute(frmMDI.HWnd, "open", App.Path & "\jetcomp.exe", _
                " -src:" & Src & " -dest:" & Dest, App.Path, SW_SHOWNORMAL)
MsgBox erreur

le long erreur retourné est 42.
42 est supérieur à 32, il s'agit donc du handle de l'application qui a été lancé.
Shellexecute s'est donc déroulé normalement et n'a retourné aucune erreur.

Cependant, le fichier Dest n'a pas été créé.
En revanche, si je vais dans app.path, que je double-clique jetcomp.exe, que je sélectionne le fichier Src en source et Dest en destination, jetcomp.exe crée bien le fichier de destination.
C'est quand j'utilise shellexecute que je ne parviens pas à créer le fichier Dest.

Merci de ce que vous pourrez trouver pour résoudre le problème
Commenter la réponse de jdddeschamps
jdddeschamps 13 Messages postés jeudi 18 décembre 2008Date d'inscription 23 mars 2009 Dernière intervention - 23 mars 2009 à 16:58
0
Merci
J'ai eu du mal ; il fallait effectivement ajouter des chr(34) (guillemets).
J'ai dû aussi ajouter le paramètre -v3 ; je pense que cela correspond à msjet 3.51 mais je ne suis pas sûr.
Voici le résultat final (à tester sur d'autres machines et dans la durée) :

Src = App.Path & "\BDD\ElamVB5.mdb"
Dest = App.Path & "\BDD\compacte_ElamVB5.mdb"
Backup = App.Path & "\BDD\back_up_ElamVB5.mdb"

FileCopy Src, Backup
Erreur = ShellExecute(0, "open", App.Path & "\jetcomp.exe", _
                " -v3 -src:" & Chr(34) & Src & Chr(34) & _
                " -dest:" & Chr(34) & Dest & Chr(34) _
                , App.Path, SW_SHOWNORMAL)
'MsgBox Erreur
FileCopy Dest, Src

On Error GoTo erreurBDD
Set db = OpenDatabase(App.Path + "\BDD\elamVB5.mdb")
db.Close
GoTo fin
erreurBDD:
'************ code à prévoir si la réparation par jetcomp n'a pas fonctionné
fin:
end sub

J'ai essayé avec une bdd corrompue en Src et le code la répare automatiquement.

Merci à Renfield, je ne compte plus les fois où tu me dépannes.
Commenter la réponse de jdddeschamps
jdddeschamps 13 Messages postés jeudi 18 décembre 2008Date d'inscription 23 mars 2009 Dernière intervention - 23 mars 2009 à 17:52
0
Merci
A ceci près que la ligne qui suit le shellexecute peut être exécutée avant la fin du shellexecute.

J'ai trouvé cela qui pourrait résoudre mon problème :
http://www.vbfrance.com/codes/SHELLEXECUTE-AVEC-POSSIBILITE-ATTENDRE-FIN-EXECUTION-AVANT-CONTINUER_3050.aspx

mais en attendant, j'ai ajouté un bête sleep 2000 après le shellexecute.
Commenter la réponse de jdddeschamps

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.