Fin de processus [Résolu]

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

Messages postés
90
Date d'inscription
mardi 30 décembre 2008
Statut
Membre
Dernière intervention
10 juin 2009

Alors j'avais dans mes processus: cmd.exe, je l'ai fermé et pof ca remarche.
-_-' le script ne c'était pas fermé...
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
que contient ton .Bat , en fait, tu peux surement t'en passer....

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.waitforexit.aspx
Messages postés
90
Date d'inscription
mardi 30 décembre 2008
Statut
Membre
Dernière intervention
10 juin 2009

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
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
...

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

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à
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
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...
Messages postés
90
Date d'inscription
mardi 30 décembre 2008
Statut
Membre
Dernière intervention
10 juin 2009

Ç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
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
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()
Messages postés
90
Date d'inscription
mardi 30 décembre 2008
Statut
Membre
Dernière intervention
10 juin 2009

Ah d'accord tu te passes du txt grâce à ça ^^

normal que
MessageBox.Show(oProcess.StandardOutput.ReadToEnd)
me montre une msgbox vide ?
Messages postés
90
Date d'inscription
mardi 30 décembre 2008
Statut
Membre
Dernière intervention
10 juin 2009

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

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.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
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
Messages postés
90
Date d'inscription
mardi 30 décembre 2008
Statut
Membre
Dernière intervention
10 juin 2009

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 ?
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
il n'aime peut ete pas le ssh dans les arguments

tu lances:

ssh ssh -i id_rsa ...
Messages postés
90
Date d'inscription
mardi 30 décembre 2008
Statut
Membre
Dernière intervention
10 juin 2009

Salut ! je suis revenu !

eh bien vb veut absolument un fichier dans ce code, j'essaie de trouver autre chose.
Messages postés
90
Date d'inscription
mardi 30 décembre 2008
Statut
Membre
Dernière intervention
10 juin 2009

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

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.