2012-05-13 4 views
1

я пытаюсь выполнить .bat файл через C# консольное приложение, используя код здесь: Решение Service hangs up at WaitForExit after calling batch fileзапуск пакетного файла через консольное приложение C#. Команды игнорируются

Кевина вроде работает, но некоторые команды в моем файле .bat игнорируются по какой-то причине, но когда я вручную исполняю файл .bat, все команды работают нормально.

например. Команда xcopy не работает при выполнении .bat из консольного приложения, но команда запуска работает нормально.

Любая идея, почему это происходит?

p.s. недавно я обнаружил, что если программа запускается из командной строки, она работает хорошо. Как так? Тем не менее, мне нужно поставить его на автозапуск, так что это не решит проблему.

Кроме того, если запущен, нажав на исполняемый файл, вывод показывает

хсору folder1 folder2

но если запущен из командной строки, вывод показывает

хсору folder1 folder2

-л/чего-л .smth скопировано

....

5 файлов, скопированных.

И это фактически копируется.

proc.StartInfo.FileName     = target; 
     proc.StartInfo.RedirectStandardError = true; 
     proc.StartInfo.RedirectStandardOutput = true; 
     proc.StartInfo.UseShellExecute   = false; 

     proc.Start(); 

     proc.WaitForExit 
      (
       (timeout <= 0) 
       ? int.MaxValue : timeout * NO_MILLISECONDS_IN_A_SECOND * 
        NO_SECONDS_IN_A_MINUTE 
      ); 

     errorMessage = proc.StandardError.ReadToEnd(); 
     proc.WaitForExit(); 

     outputMessage = proc.StandardOutput.ReadToEnd(); 
     proc.WaitForExit(); 
+0

Вы можете указать, какие команды проигнорировать? – Shai

+3

Вы установили 'WorkDir' внутри вашего процесса, прежде чем запускать его? Если ваш пакетный файл не смог найти файлы, определенные с помощью частичного пути ... – Marco

+0

Возможно, это проблема безопасности (у порожденного процесса нет доступа на запись к некоторым вашим файлам/дорожкам). Перегрузка метода 'Start()' позволяет указать имя пользователя/пароль. http://msdn.microsoft.com/en-us/library/sxf2saat.aspx –

ответ

2

команды Batch файл сделать не игнорируются при выполнении команд процессора от службы. Они, однако, легко сбой и могут делать это незаметно, так как вы не можете видеть их вывод. Типичными причинами отказа являются неправильное задание ProcessStartInfo.WorkingDirectory, так что относительные пути больше не работают или возникают проблемы, вызванные работой службы с другой учетной записью пользователя, которая не имеет тех же прав, что и тот, который вы используете с рабочего стола.

Диагностируйте проблемы, перенаправляя вывод в файл, запустите cmd.exe/c и используйте оператор >. Добавьте 2>&1, чтобы файл содержал как регулярные, так и выходные данные ошибки. И с помощью %errorlevel% variable и EXIT command разумно, чтобы вы могли обнаружить, что выполнение завершилось с ошибкой, используя свойство Process.ExitCode.

+0

Ганс, ошибок абсолютно нет, также пути абсолютны. Также см. Дополнения выше. – athe

+0

Ты сломал мой хрустальный шар. Отлично, сегодня я не собирался ходить по магазинам. –

+0

Извините, не понимаю, английский не мой первый язык. – athe