«Процесс не может получить доступ к файлу, потому что он используется другим процессом» c# - PullRequest
0 голосов
/ 26 апреля 2020

Я хочу запустить файл exe, используя процесс в c#, при запуске exe-файла я получу строку с символом, нажатым на клавиатуре, и он будет напечатан процессу, используя RedirectStandardOutput = true я получу byte[], который содержит файл и преобразует его в файл, затем создам новый процесс, который активирует файл, и я намерен прочитать его из файла (строка / символ, нажатый клавишным ключом) и увидеть это в TB, который является TextBlock (я работаю над WPF). но когда я запускаю его, он печатает исключение, упомянутое выше. вот мой код:

private void p1()
{
   byte[] b1 = the byte[] containing the file;

   FileStream file = File.Create("p.exe");
   file.Write(b1, 0, b1.Length);
   try
       {
          var process = new Process
          {
           StartInfo = new ProcessStartInfo
             {
               FileName = file.Name,
               UseShellExecute = false,
               RedirectStandardOutput = true,
               CreateNoWindow = true
              }
          };

          Thread t = new Thread(() => { res = ReadFromP(process); });
          t.Start();
          t.Join();
          TB.Text=res;


       }

   catch
    {
       TB.text="didnt worked";
    }
}

private string ReadFromP(Process p)
{
 try
  {
   string line;
   p.Start();
   // while (!p.StandardOutput.EndOfStream)
   //{
   line = p.StandardOutput.ReadLine();
   //} 
   return line;
   //p.WaitForExit();

   }


  catch (Exception e)
  {
     return(e.Message);
  }
}

1 Ответ

0 голосов
/ 26 апреля 2020
FileStream file = File.Create("p.exe");

Здесь вы открываете поток. Этот никогда не закрывается. Поэтому, когда вы пытаетесь получить к нему доступ позже, он уже будет использоваться и не может быть открыт. Вам нужно закрыть его, обернув оператор использования вокруг использования, или добавить file.Close (), когда вы закончите работать с файлом.

using (var file = File.Create("p.exe"))
        {

        }

или

file.Close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...