2015-02-20 2 views
0

Я пытаюсь выполнить приведенную ниже команду на cmd.exe с C#. Я пробовал следующие методы, но никто из них, похоже, не работает. Все они могут открыть CMD, но после этого ничего не происходит. Также, если я использую простые аргументы, такие как «/ C start winword», он работает только с методом 3.C# - Выполнение CMD.exe с аргументами, содержащими% VS110COMNTOOLS%

Также я попытался добавить/C и/K в строку аргумента, но они, похоже, не работают.

 string argumentString = "\"%VS110COMNTOOLS%/../IDE/devenv.exe\" /diff " + "\"" + txt_File1.Text + "\" \"" + txt_file2.Text + "\""; 
     //string argumentString = "start winword"; 

     // Method 1 
     System.Diagnostics.Process ExecuteCommand = new System.Diagnostics.Process(); 
     System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); 
     startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
     startInfo.FileName = "cmd.exe"; 
     startInfo.UseShellExecute = true; 

     startInfo.Arguments = argumentString; 
     ExecuteCommand.StartInfo = startInfo; 
     ExecuteCommand.Start(); 

     //Method 2 
     System.Diagnostics.Process.Start(@"cmd.exe", argumentString); 

     // Method 3 
     System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", argumentString); 
     procStartInfo.RedirectStandardOutput = true; 
     procStartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
     procStartInfo.UseShellExecute = false; 
     procStartInfo.CreateNoWindow = false; 
     System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
     proc.StartInfo = procStartInfo; 
     proc.Start(); 
     string result = proc.StandardOutput.ReadToEnd(); 
     Console.WriteLine(result); 
+0

Почему вы не начиная указанные исполняемые файлы напрямую? Я имею в виду, почему вы не делаете что-то вроде этого: startInfo.FileName = "winword.exe"? – Vitaliy

+0

На самом деле я просто пытаюсь понять, открывается ли слово с использованием этого подхода. Я действительно хочу аргумент - «\»% VS110COMNTOOLS%/../IDE/devenv.exe \ "/ diff" + "\" "+ txt_File1.Text +" \ "\" "+ txt_file2.Text +" \ ""; – biswasprateek

ответ

0

Добавление/k в аргументы cmd.exe делает работу.

Заканчивать код:

using System; 

namespace ProcessRun 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      //var argumentString = "\"%VS120COMNTOOLS%/../IDE/devenv.exe\" /diff " + "\"" + txt_File1 + "\" \"" + txt_file2 + "\""; 
      string argumentString = "start winword"; 

      // Method 1 
      Method1(argumentString); 

      //Method 2 
      Method2(argumentString); 

      // Method 3 
      Method3(argumentString); 
     } 

     private static void Method3(string argumentString) 
     { 
      System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", "/k " + argumentString); 
      procStartInfo.RedirectStandardOutput = true; 
      procStartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
      procStartInfo.UseShellExecute = false; 
      procStartInfo.CreateNoWindow = false; 
      System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
      proc.StartInfo = procStartInfo; 
      proc.Start(); 
      string result = proc.StandardOutput.ReadToEnd(); 
      Console.WriteLine(result); 
     } 

     private static void Method2(string argumentString) 
     { 
      System.Diagnostics.Process.Start(@"cmd.exe", "/k " + argumentString); 
     } 

     private static void Method1(string argumentString) 
     { 
      System.Diagnostics.Process ExecuteCommand = new System.Diagnostics.Process(); 
      System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); 
      startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal; 
      startInfo.FileName = "cmd.exe"; 
      startInfo.UseShellExecute = true; 

      startInfo.Arguments = "/k " + argumentString; 
      ExecuteCommand.StartInfo = startInfo; 
      ExecuteCommand.Start(); 
     } 
    } 
} 
+0

Спасибо @Vitaliy, но я действительно хочу использовать аргумент - var аргументString = "\"% VS120COMNTOOLS%/../IDE/devenv.exe \ "/ diff" + "\" "+ txt_File1 +" \ "\ "" + txt_file2 + "\" "; «Я использовал слово winword для тестирования – biswasprateek

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