Fin de processus

Résolu
steph064 Messages postés 90 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 10 juin 2009 - 29 mai 2009 à 12:16
steph064 Messages postés 90 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 10 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.

17 réponses

steph064 Messages postés 90 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 10 juin 2009
29 mai 2009 à 14:37
Alors j'avais dans mes processus: cmd.exe, je l'ai fermé et pof ca remarche.
-_-' le script ne c'était pas fermé...
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
29 mai 2009 à 12:53
que contient ton .Bat , en fait, tu peux surement t'en passer....

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.waitforexit.aspx
0
steph064 Messages postés 90 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 10 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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
29 mai 2009 à 13:49
...

oublie le bat, en ce cas.

le Framework te permet de récupérer la sortie standard directement...

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx
0

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

Posez votre question
steph064 Messages postés 90 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 10 juin 2009
29 mai 2009 à 14:03
oula, comment on utilise ce truc, msdn je trouve ça flou, moi je connais que
sub et function

après msdn dit que pour déclarer il faut faire

False)> _
PublicReadOnlyProperty StandardOutput As StreamReader

et visual studio 2005 me dit ki fo mettre apres

get
[instructions]
end get
end property

C'est quoi ce browsableAttribute ?
Comment utiliser ça, où surtout ?

???????

Chui un peu perdu là
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
29 mai 2009 à 14:09
y'a des exemples tout prets, sur la page que je t'ai indiquée...

Dim myProcess As New Process()
Dim myProcessStartInfo As New ProcessStartInfo("Process_StandardOutput_Sample.exe")

myProcessStartInfo.UseShellExecute = False
myProcessStartInfo.RedirectStandardOutput = True
myProcess.StartInfo = myProcessStartInfo
myProcess.Start()

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...
0
steph064 Messages postés 90 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 10 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"

je v devenir fou
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
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()

MessageBox.Show(oProcess.StandardOutput.ReadToEnd)

oProcess.Close()
0
steph064 Messages postés 90 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 10 juin 2009
29 mai 2009 à 14:57
Ah d'accord tu te passes du txt grâce à ça ^^

normal que
MessageBox.Show(oProcess.StandardOutput.ReadToEnd)
me montre une msgbox vide ?
0
steph064 Messages postés 90 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 10 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.
0
steph064 Messages postés 90 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 10 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.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
29 mai 2009 à 15:15
s'il trouve pas les fichiers, ca doit expliquer le temps de réponse.

concernant le repertoire, tu peux régler la propriété WorkingDirectory des ProcessStartInfo
0
steph064 Messages postés 90 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 10 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 ?
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
1 juin 2009 à 08:26
il n'aime peut ete pas le ssh dans les arguments

tu lances:

ssh ssh -i id_rsa ...
0
steph064 Messages postés 90 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 10 juin 2009
2 juin 2009 à 08:34
Salut ! je suis revenu !

eh bien vb veut absolument un fichier dans ce code, j'essaie de trouver autre chose.
0
steph064 Messages postés 90 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 10 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 ?
0
steph064 Messages postés 90 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 10 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.

J'espère que le problème posé est plus clair.
0
Rejoignez-nous