Как правильно запускать bat-файлы - C#

Узнай цену своей работы

Формулировка задачи:

Не пойму почему почему после процесса запускающий .bat файл не образуется файл .exe где у меня здесь ошибка Однако когда использую код в отдельном консольном приложении файл .exe образуется и все работает
 Process process = new Process();
 process.StartInfo.FileName = @"C:\new\61\61.bat";
                 
                 process.Start();
при клике мышью на .bat файл .exe файл образуется а здесь не хочет зараннеее спасибо
 private void button4_Click(object sender, EventArgs e)
          {
             // string fullFileName = @"F:\prin_fil\таймер.docx";
              DirectoryInfo dir = new DirectoryInfo(@"C:\prin_fil");
             
FileInfo[] bmpfiles = dir.GetFiles("*.cs");
Console.WriteLine("Total number of bmp files", bmpfiles.Length);
             foreach( FileInfo f in bmpfiles)
              {
 MessageBox.Show("Name is : {0}  " + f.Name);
 MessageBox.Show("Length of the file is : {0}  " + f.Length.ToString());
 MessageBox.Show("Creation time is : {0}  " + f.CreationTime.ToString());
 MessageBox.Show("Creation time is : {0}  " + f.FullName.ToString());
 MessageBox.Show("Creation time is : {0}  " + f.Extension.ToString());
 MessageBox.Show("Attributes of the file are : {0}  "  +
                  f.Attributes.ToString());
 
 for (int i = 0; i < AlShow.Count; i++)
 {
     if ( this.grd_Show.Rows[i].Cells[0].Value.ToString() + f.Extension.ToString() == f.Name.ToString())
     {
         //время прихода копии
            DateTime dt = DateTime.Now;
            int sec = dt.Second;
            int min = dt.Minute;
            int hour = dt.Hour;
            string jj = "_";
            jj += hour.ToString() + "_" + min.ToString() + "_" + sec.ToString();
 
            string put = @"cd C:\new\" + this.grd_Show.Rows[i].Cells[0].Value.ToString() + "  \r\ncsc /t:exe  " + f.Name.ToString();
    //делаем копию
      f.CopyTo(@"C:\new\" + this.grd_Show.Rows[i].Cells[0].Value.ToString() + "\\" + this.grd_Show.Rows[i].Cells[0].Value.ToString() + "\\" + jj + "__" + f.Name.ToString(), true);
         //Есть ли уже файл в папке
         if (File.Exists(@"C:\new\" + this.grd_Show.Rows[i].Cells[0].Value.ToString() + "\\"  + f.Name.ToString()) == true)
           {     
             //стираем файл
                 DirectoryInfo dir3 = new DirectoryInfo(@"C:\new\61");
                 FileInfo[] bmpfiles3 = dir3.GetFiles("*.cs");
                 foreach (FileInfo f3 in bmpfiles3)
                 {
                     f3.Delete();
                 }
                 FileInfo[] bmpfiles4 = dir3.GetFiles("*.bat");
                 foreach (FileInfo f4 in bmpfiles3)
                 {
                     f4.Delete();
                 }
             //переносим файл
                 f.MoveTo(@"C:\new\" + this.grd_Show.Rows[i].Cells[0].Value.ToString() + "\\"  + f.Name.ToString());
                // dir3.Create(this.grd_Show.Rows[i].Cells[0].Value.ToString() + ".bmp");
                 //создать (если нет) либо открыть если есть и записать текст (путем замены если что то      было   записано)
                 //cd C:\new\ + this.grd_Show.Rows[i].Cells[0].Value.ToString() + "csc /t:exe" + f.Name.ToString();
                
                 System.IO.File.WriteAllText(@"C:\new\" + this.grd_Show.Rows[i].Cells[0].Value.ToString() + "\\" + this.grd_Show.Rows[i].Cells[0].Value.ToString() + ".bat", put);
                 Thread.Sleep(300);
                 MessageBox.Show("Пошло");
                 Process process = new Process();
                 process.StartInfo.FileName = @"C:\new\61\61.bat";
                 //подписываемся на событие завершения процесса
                 //process.Exited += process_Exited;
                 //асинхронная операция, не блокирует поток, из которого была вызвана
                 process.Start();
             // Pros_();
             
             }
             
             else
             {
                 //переносим файл
                 f.MoveTo(@"C:\new\" + this.grd_Show.Rows[i].Cells[0].Value.ToString() + "\\" + f.Name.ToString());
//создаем файл .bat
                 System.IO.File.WriteAllText(@"C:\new\" + this.grd_Show.Rows[i].Cells[0].Value.ToString() + "\\" + this.grd_Show.Rows[i].Cells[0].Value.ToString() + ".bat", put);
                 Thread.Sleep(300);
                 MessageBox.Show("Пошло");
                 Process process = new Process();
                 process.StartInfo.FileName = @"C:\new\61\61.bat";
                 //подписываемся на событие завершения процесса
                 //process.Exited += process_Exited;
                 //асинхронная операция, не блокирует поток, из которого была вызвана
                 process.Start();
               //  Pros_();
               //  dir2.CreateSubdirectory(this.grd_Show.Rows[i].Cells[0].Value.ToString());            
            }         
         } 
             
       }
     }
    }
this.grd_Show.Rows[i].Cells[0].Value.ToString() - это номер файла или папки
который бередся из поля dataGridView
Ясно процесс где то блокируется самой программой но где вот вопросс
Программа большая

Решение задачи: «Как правильно запускать bat-файлы»

textual
Листинг программы
P.StartInfo.WorkingDirectory = папка, где лежит батник

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5
Похожие ответы