steph064
Messages postés90Date d'inscriptionmardi 30 décembre 2008StatutMembreDernière intervention10 juin 2009
-
29 mai 2009 à 12:16
steph064
Messages postés90Date d'inscriptionmardi 30 décembre 2008StatutMembreDernière intervention10 juin 2009
-
2 juin 2009 à 09:30
Je dois exécuter mon .bat qui va me créer un .text que je vais lire juste après. Le problème c'est que lorsque je veux ouvrir ce fichier texte, visual studio me dit que ce fichier texte est utilisé par un autre processus et ça ne peut être que mon script.bat. Je cherche un algorithme du genre:
Quand script.HasExited alors tu peux continuer (dans les grandes lignes)
J'ai trouvé script.HasExited qui renvoi true si le processus est terminé mais je trouve pas ce que je veux faire.
Pouvez-vous m'aider svp.
A voir également:
Il n'y a pas de processus à l'autre extrémité du canal
steph064
Messages postés90Date d'inscriptionmardi 30 décembre 2008StatutMembreDernière intervention10 juin 2009 29 mai 2009 à 13:46
mon .bat contient
@echo off
Rem script qui va rassembler les journeaux dans un seul fichier
del journaux.txt >nul
Rem connection au serveur
ssh -i id_rsa journaux@stage cat /home/e-smith/files/users/journaux/home/journaux.txt >>journaux.txt
Je récupère un fichier journal qui se trouve dans un serveur SME, je fais ça pour que le fichier texte soit directement dans le dossier de l'application pour éviter des erreurs si quelqu'un change l'architecture dans SME, dans ce cas il n'y aura qu'à modifier le .bat
Dim myStreamReader As StreamReader = myProcess.StandardOutput
' Read the standard output of the spawned process.
Dim myString As String = myStreamReader.ReadLine()
Console.WriteLine(myString)
myProcess.Close()
c'est pas le meilleur exemple du monde, mais ca te donne les bases...
steph064
Messages postés90Date d'inscriptionmardi 30 décembre 2008StatutMembreDernière intervention10 juin 2009 29 mai 2009 à 14:30
Ça m'a l'air bien compliqué tout ça, soit je suis idiot, soit je m'y prends comme un manche (c'est surement ça ), avec mes 3 lignes qui finissaient par script.start() c'était plus simple et plus court, je comprenais mieux.
Mais mon précédent code qui m'executait mon bat en 1 ligne ne me posait pas de problème mais je devais mettre .\script.bat
Là je viens de mettre l'exécution du script en commentaires, ça me dit que journaux.txt est utilisé par un autre processus.
C'est bizar ça ne me le faisais pas avant.
J'ai juste rajouté plein de if pour voir si les fichiers dont j'avais besoin existaient bien pour éviter des erreurs et j'ai mi l'exécution du script + tôt.
Même après avoir tout remit comme avant quand ça marchait ça me remet "journaux.txt est utilisé par un autre processus"
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202175 29 mai 2009 à 14:50
dommage de se passer du framework et de générer inutilement un fichier texte.
vraiment.
Dim oProcess As New Process
With oProcess.StartInfo
.FileName = "ssh"
.Arguments = "ssh -i id_rsa journaux@stage cat /home/e-smith/files/users/journaux/home/journaux.txt"
.CreateNoWindow = True
.RedirectStandardOutput = True
.UseShellExecute = False
End With
oProcess.Start()
oProcess.WaitForExit()
steph064
Messages postés90Date d'inscriptionmardi 30 décembre 2008StatutMembreDernière intervention10 juin 2009 29 mai 2009 à 15:01
Je veux pas critiqué négativement mais quand je compare mon code et le tiens, mon application est plus rapide, cependant le tiens ça évitera que j'ai des erreurs au niveau du fichier txt.
steph064
Messages postés90Date d'inscriptionmardi 30 décembre 2008StatutMembreDernière intervention10 juin 2009 29 mai 2009 à 15:10
Bon je veux bien utiliser ton code mais si il me renvoi une chaîne vide il va pas m'avancer à grand chose. Si ça peut aider, le .bat utilise des .dll qui sont dans son repertoire. En fait j'ai avec le .bat 5 dll, ssh.exe et id_rsa.
steph064
Messages postés90Date d'inscriptionmardi 30 décembre 2008StatutMembreDernière intervention10 juin 2009 29 mai 2009 à 15:54
Bon j'ai mi ça:
Dim oProcess As New Process
With oProcess.StartInfo
.WorkingDirectory = Application.StartupPath
.FileName = "ssh"
.Arguments = "ssh -i id_rsa journaux@stage cat /home/e-smith/files/users/journaux/home/journaux.txt"
.CreateNoWindow = True
.RedirectStandardOutput = True
.UseShellExecute = False
End With
oProcess.Start()
oProcess.WaitForExit()
MessageBox.Show(oProcess.StandardOutput.ReadToEnd)
Ca me retourne encore une chaine vide.
Alors .WorkingDirectory = Application.StartupPath va définir le repertoir où se trouve les fichiers
.FileName = "ssh" va définir l'application ou document à lancer
.Arguments ce sont les lignes de commandes à exécuter
.RedirectStandardOutput si j'ai bien compris ca sert à récupérer le résultat de la sorti des commandes executées
donc oProcess.StandardOutput.ReadToEnd ça lit le résultat du premier caractere au dernier.
Alors pourquoi ça marche pas ?
steph064
Messages postés90Date d'inscriptionmardi 30 décembre 2008StatutMembreDernière intervention10 juin 2009 2 juin 2009 à 09:08
Je viens d'y penser, mon script.bat a besoin de ssh.exe, cygcrypto-0.9.7.dll, cygminires.dll, cygwin1.dll, cygz.dll et de cygpopt-0.dll pour s'exécuter, peut être est-ce ça qui gène le lancement de la commande dos sous VB, il ne sait pas qu'il faut ces fichiers pour que la ligne de commande fonctionne.
Comment faire ?
steph064
Messages postés90Date d'inscriptionmardi 30 décembre 2008StatutMembreDernière intervention10 juin 2009 2 juin 2009 à 09:30
Alors pour résumer mon .bat a besoin de:
ssh.exe (pour la commande .ssh et ouvrir un tunnel sécurisé au serveur SME)
id_rsa (qui est une clef d'accès à un compte sur SME nécessaire à l'exécution de la commande)
cygcrypto-0.9.7.dll
cygminires.dll
cygwin1.dll
cygz.dll
cygpopt-0.dll
(les dll je sais pas pourquoi il les faut mais il les faut)
Le but de mon Script.bat est d'ouvrir un tunnel sécurisé vers un serveur SME via ssh, et de récupérer un fichier texte organisé comme ceci:
Nom adhérent , date , heureDébut , REUSSIE/ECHEC , heureFin
Le must ça serait d'exécuter la commande sans l'aide de fichier, mais j'aurai besoin du ssh.exe, du id_rsa et surement des dll, et de récupérer la sorti de la commande (ce qu'on essaye de faire là). J'ai posté un sujet pour la publication ("question sur la publication")
Aidez moi SVP, je fais ça avec la publication et j'ai quasiment fini, après c'est de la finission, l'application sera opérationnelle rien qu'en faisant ce que j'ai cité ci-dessus.