Mon .bat ne se lance pas

Signaler
Messages postés
4
Date d'inscription
mardi 22 février 2005
Statut
Membre
Dernière intervention
14 juin 2007
-
Messages postés
4
Date d'inscription
mardi 22 février 2005
Statut
Membre
Dernière intervention
14 juin 2007
-
Je vous explique mon problème.
Je dois créer puis exécuter un .bat à partir de mon application C#. Le code (en fin) se compile parfaitement.
Mon .bat se crée bien avec les infos qu'il faut mais ne s'exécute pas correctement. En effet, une fois créé il ne fait pas se qu'il doit faire : je suis obligé de le lancer manuellement ! Je ne vois pas ce qu'il cloche !

Si vous avez des idées, n'hésitez pas !! Merci d'avance.

Le code :
_____________________________________________________________________

private void exportXMLToVisioToolStripMenuItem_Click(object sender, EventArgs e)
        {
            StreamWriter fichierBat;    // Déclaration
            String cheminFichierBat = chemin_install_dir + @"\xml2visio\run.bat";
            
            fichierBat = File.CreateText(cheminFichierBat); // Creation du fichier
            fichierBat.WriteLine("xml2visio.exe " + chemin_install_dir + @"\Stories\LittleRedRidingHood01\LittleRedRidingHood01.xml " + chemin_install_dir + @"\Stories\LittleRedRidingHood01\Visio\test266.vdx");  // Passage à la ligne automatique
            fichierBat.WriteLine("exit");  // Passage à la ligne automatique
            fichierBat.Close(); // Ferme le fichier

            Process.Start(chemin_install_dir + @"\xml2visio\run.bat");
        }

6 réponses

Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
63
Hello,

En principe, rien n'empèche le lancement d'un bat.
J'ai fait un petit exemple qui fonctionne :

File.
WriteAllText(
@"C:\temp\test.bat",
@"ECHO test >C:\temp\test.txt");

Process.
Start(
@"C:\temp\test.bat");
Par contre, un process lancé à par défaut comme WorkingDirectory celui de ton application.
Il faut donc peut-être donner le chemin complet vers xml2visio.exe, ou alors changer le WorkingDirectory en utilisant un ProcessStartInfo.

Mais pourquoi fais-tu un bat, tu pourrais sans doute aussi directement lancer le processus xml2visio.exe, non ?

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Messages postés
4
Date d'inscription
mardi 22 février 2005
Statut
Membre
Dernière intervention
14 juin 2007

Merci SharpMao pour ta réponse.

J'ai réessayé de faire en sorte de donner le chemin complet de xml2visio.exe mais ça ne marche pas non plus : même chose qu'avant, j'écris bien mon .bat comme il faut mais il ne se lance pas automatiquement donc toujours obligé de le faire manuellement en double-cliquant !

Après pour ta question sur le pourquoi ne pas directement utilisé le xml2visio, ma réponse est "ça ne marche pas". J'ai repris un ancien projet fait par quelqu'un d'autre et apparement il faut passer par le .bat !

Je me dis que je pourrais peut être, une fois le .bat créé, ouvrir l'explorateur Windows directement au dossier contenant le .bat. Mais je ne sais pas trop comment m'y prendre pour lui dire où il doit s'ouvrir (par exple directement sur D:\Truc\Muche)
Pour ouvrir l'explorer, il faut faire : Process.Start("explorer.exe") mais après ????

Kazrakel
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
63
Tu as essayé avec le Working Directory ?

StreamWriter

fichierBat;
// Déclaration
String
cheminFichierBat =
Path.
Combine(
chemin_install_dir,
@"\xml2visio\run.bat");

fichierBat =
File.
CreateText(
cheminFichierBat);
// Creation du fichier
fichierBat.
WriteLine(
"xml2visio.exe {0} {1}",

            Path.
Combine(
chemin_install_dir,
@"Stories\LittleRedRidingHood01\LittleRedRidingHood01.xml"),

            Path.
Combine(
chemin_install_dir,
@"Stories\LittleRedRidingHood01\Visio\test266.vdx"));

fichierBat.
WriteLine(
"exit");
// Sans doute inutile
fichierBat.
Close();
// Ferme le fichier
ProcessStartInfo
psi =
new
ProcessStartInfo(
cheminFichierBat);

psi.
WorkingDirectory=
chemin_install_dir;

Process.
Start(
psi);

Ou alors directement :

ProcessStartInfo

psi =
new
ProcessStartInfo(
"xml2visio.exe");

psi.
WorkingDirectory =
chemin_install_dir;
psi.
Arguments =
string.
Format(
"{0} {1}",

            Path.
Combine(
chemin_install_dir,
@"Stories\LittleRedRidingHood01\LittleRedRidingHood01.xml"),

            Path.
Combine(
chemin_install_dir,
@"Stories\LittleRedRidingHood01\Visio\test266.vdx"));

Process.
Start(
psi);

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Salut, certains antivirus considèrent les *.bat comme des scripts dangereux, ils peuvent les bloquer. Désactive ton antivirus pour tester.
Messages postés
4
Date d'inscription
mardi 22 février 2005
Statut
Membre
Dernière intervention
14 juin 2007

Merci beaucoup pour ton aide SharpMao.

Ca marche pratiquement parfaitement . En effet, il reste un petit problème.
Je m'explique : quand le chemin de mes fichiers utilisés comporte des espaces, ça ne marche plus ! Je pense que la présence d'un espace fait que après ça change d'arguments. Il faudrait que je les mette entre guillemets pour que ça marche à tous les coups mais je ne sais pas comment faire.

Mon code :
___________________________________________

private void exportXMLToVisioToolStripMenuItem_Click(object sender, EventArgs e)
        {
            StreamWriter fichierBat;    // Déclaration
            String cheminFichierBat = chemin_install_dir + @"\xml2visio\run.bat";
            String fileNameXML_path = Path.GetDirectoryName(fileNameXML);
            String fileNameXML_pathfile = Path.GetFileNameWithoutExtension(fileNameXML);
            String arg1 = fileNameXML_path + "\" + fileNameXML_pathfile + ".xml";
            String arg2 = chemin_install_dir + @"\Stories\LittleRedRidingHood01\Visio" + fileNameXML_pathfile + ".vdx";

            fichierBat = File.CreateText(cheminFichierBat); // Creation du fichier
            fichierBat.WriteLine("xml2visio.exe {0} {1}", arg1, arg2);
            fichierBat.WriteLine("exit"); // Sans doute inutile
            fichierBat.Close(); // Ferme le fichier
            ProcessStartInfo psi = new ProcessStartInfo(cheminFichierBat);
            psi.WorkingDirectory = chemin_install_dir + @"\xml2visio";
            Process.Start(psi);
        }
Messages postés
4
Date d'inscription
mardi 22 février 2005
Statut
Membre
Dernière intervention
14 juin 2007

C'est bon !!!! Problème résolu !!
Il fallait simplement faire """ pour rajouter les guilemets !
Merci beaucoup pour votre aide !