2

Где я буду ошибаться? Это похоже на то, что аргументы даже не выполняются, а просто открывает командную строку, и все. «Результаты» (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; 

Сейчас я получаю «заглушка получила плохие данные» ...

ответ

0

Я, наконец, вернулся к работе над этим и понял, как заставить это работать.

Мне нужно было указать имя пользователя, пароль и домен Process.ProcessStartInfo для выполнения процесса.

3

От the docs:

Cmd

Запускает новый экземпляр интерпретатора команд, Cmd.exe. Использовано без параметров, cmd отображает версию Windows XP и авторское право информацию.

Синтаксис cmd [[{/ c |/k}] [/ s] [/ q] [/ d] [{/ a |/u}] [/ t: fg] [/ e: {on | от}] [/ F: {на | от}] [/ v: {ON | OFF}] строка] к началу страницы

Параметры

/с: Проводит команду, указанную в строке а затем останавливается.

Так что вам нужно:

  1. Передайте полный путь к EXE или
  2. Set the working directory в каталог, содержащий ехе

затем

  1. Сделать processFile == "[] csvde.exe" и удалить его из processArguments, или
  2. Подготовить "/ c \" "и добавить" \ "" в processArguments.
+0

Вариант 1: Ошибка, система не может найти указанный файл. Вариант 2: Ошибка, «csvde» не распознается как внутренняя или внешняя команда, операционная программа или командный файл. – ganders

+1

Отредактированный вариант один. Для обоих параметров вам необходимо установить рабочий каталог на один, содержащий «csvde.exe», или добавить полный путь к exe. –

+0

Ничего себе, что-то не так с моей машиной. Я перешел через Explorer в C: \ Windows \ System32, нашел csvde.exe, скопировал имя файла, вставил в этот бит кода, и в поле сообщения указано «нет» .... if (File.Exists (@ "C: \ Windows \ System32 \ csvde.exe")) MessageBox.Show ("yes"); else MessageBox.Show ("no"); – ganders

Смежные вопросы