Проблема вызова внешнего .exe с помощью c # - PullRequest
0 голосов
/ 30 марта 2011

Я пытаюсь запустить этот файл .exe из моего кода на C #, он вызывает файл .exe, но затем происходит сбой на полпути. Если я нажимаю на .exe в проводнике, он выполняет свою работу, поэтому мне интересно, есть ли проблема с кодом, который я использую для его вызова:

            string fileName =  "loadscript.exe";
            Utils.Logger.Info("Calling script:" + fileName);
            Process process = new Process();
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.FileName = fileName;
            process.StartInfo.RedirectStandardOutput = true;
            process.Start();
            Thread.Sleep(10000);
            process.WaitForExit();
            int exitCode = process.ExitCode;
            string output = process.StandardOutput.ReadToEnd();
            Utils.Logger.Info(".exe Output: ");
            Utils.Logger.Info(output);

Ответы [ 2 ]

5 голосов
/ 30 марта 2011
  Thread.Sleep(10000);
  process.WaitForExit();
  int exitCode = process.ExitCode;
  string output = process.StandardOutput.ReadToEnd();

Мне кажется, что это создает тупик, и это может быть проблемой для возможного сбоя. Удалите сон и попробуйте это вместо:

  string output = process.StandardOutput.ReadToEnd();
  process.WaitForExit();
  int exitCode = process.ExitCode;

Пожалуйста, смотрите ответ на этот вопрос для объяснения:

ResGen.exe зависает при перенаправлении вывода

1 голос
/ 30 марта 2011
       process.StartInfo.UseShellExecute = false;

Требуется указать имя файла .exe.Если для него задано значение true, для запуска файла используется другая функция Windows, достаточно умная, чтобы выяснить, что .bat-файлу требуется запуск cmd.exe для интерпретации команд в .bat-файле.

Это то, что вам нужно сделать самостоятельно, имя файла должно быть «cmd.exe», свойство Arguments должно быть «loadcript.bat».

...