Mon .bat ne se lance pas

Kazrakel Messages postés 4 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 14 juin 2007 - 13 juin 2007 à 03:32
Kazrakel Messages postés 4 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 14 juin 2007 - 14 juin 2007 à 02:45
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

SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
13 juin 2007 à 08:11
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)
0
Kazrakel Messages postés 4 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 14 juin 2007
13 juin 2007 à 12:14
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
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
13 juin 2007 à 12:33
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)
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
13 juin 2007 à 13:25
Salut, certains antivirus considèrent les *.bat comme des scripts dangereux, ils peuvent les bloquer. Désactive ton antivirus pour tester.
0

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

Posez votre question
Kazrakel Messages postés 4 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 14 juin 2007
13 juin 2007 à 22:35
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);
        }
0
Kazrakel Messages postés 4 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 14 juin 2007
14 juin 2007 à 02:45
C'est bon !!!! Problème résolu !!
Il fallait simplement faire """ pour rajouter les guilemets !
Merci beaucoup pour votre aide !
0
Rejoignez-nous