Где я буду ошибаться? Это похоже на то, что аргументы даже не выполняются, а просто открывает командную строку, и все. «Результаты» (StandardOutput) - это именно то, что появляется, когда вы просто открываете новую командную строку ... говорит Microsoft Windows [Version 6.1.7600] Copyright ... blah, тогда путь, из которого начинается командная строка.Выполнение System.Diagnostics.Process cmd.exe открывает только командную строку, не выполняет аргументы
Во всяком случае, вот код, который у меня есть:
private static void ExecuteProcess(string processFile, string processArguments)
{
ProcessStartInfo psi = new ProcessStartInfo(processFile, processArguments);
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
psi.UseShellExecute = false;
//psi.CreateNoWindow = true;
Process p = new Process();
p.StartInfo = psi;
try
{
Cursor.Current = Cursors.WaitCursor;
p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
Cursor.Current = Cursors.Default;
if (p.ExitCode == 0)
MessageBox.Show(output, "Results");
else
throw new Exception(p.StandardError.ReadToEnd());
}
catch (Exception ex)
{
Cursor.Current = Cursors.Default;
MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
p.Dispose();
}
}
ProcessFile равно "cmd.exe" processArguments равна:
csvde -s {servername} -f {filename} -d OU=MyOU,DC=dmz,DC=lan -r "(objectClass=organizationalUnit)" -n
Любая помощь, почему «доводы «не будут выполнены, было бы здорово!
Edit:
Одна вещь, которую я нашел до сих пор, предложение Криса о разрешениях, правда, мне нужно было установить:
psi.Verb = "runas";
Но при выполнении процесса он не похож было имя пользователя, связанное с процессом, поэтому я добавил эту линию, а также:
psi.UserName = Environment.UserName;
Сейчас я получаю «заглушка получила плохие данные» ...
Вариант 1: Ошибка, система не может найти указанный файл. Вариант 2: Ошибка, «csvde» не распознается как внутренняя или внешняя команда, операционная программа или командный файл. – ganders
Отредактированный вариант один. Для обоих параметров вам необходимо установить рабочий каталог на один, содержащий «csvde.exe», или добавить полный путь к exe. –
Ничего себе, что-то не так с моей машиной. Я перешел через Explorer в C: \ Windows \ System32, нашел csvde.exe, скопировал имя файла, вставил в этот бит кода, и в поле сообщения указано «нет» .... if (File.Exists (@ "C: \ Windows \ System32 \ csvde.exe")) MessageBox.Show ("yes"); else MessageBox.Show ("no"); – ganders