У меня есть bat-файл, который копирует файлы из одного места в другое.
SET SRC=%1
SET DEST=%2
xcopy /Y/I %SRC%\*.txt %DEST%\temp
echo Done!
Я пытаюсь запустить этот файл с помощью программы на C #
var psi = new ProcessStartInfo(fileToRun);
psi.Arguments = args;
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.UseShellExecute = false;
psi.CreateNoWindow = true;
Process cmdProc = Process.Start(psi);
StreamReader output = cmdProc.StandardOutput;
StreamReader errors = cmdProc.StandardError;
cmdProc.WaitForExit();
Bat-файл выполнен, я вижу сообщение 'Done!' , но файлы не копируются.
Единственный способ, которым это работает, это
psi.UseShellExecute = true;
psi.RedirectStandardOutput = false;
psi.RedirectStandardError = false;
Но в этом случае мне нужно отключить перенаправление вывода / ошибки, и они мне нужны.
Так что это не работает для меня.
Я попытался установить имя пользователя / пароль администратора
psi.UserName = username;
psi.Password = password;
Вход в систему успешен, но я получаю «Недопустимый дескриптор» в поток StandardError.
Полагаю, процесс, который я пытаюсь запустить, не имеет прав на копирование файлов и
Я не знаю, как предоставить ему эти разрешения.
Пожалуйста, помогите!
EDITED
Спасибо за ответы!
Я потратил несколько часов, пытаясь решить эту проблему, и, как всегда, я опубликовал свой вопрос и нашел решение :))
Чтобы не получить сообщение «Неверный дескриптор», вам нужно
psi.RedirectStandardInput = true;
Но теперь я вижу окно cmd.exe, если задано имя пользователя, что плохо.