2017-06-06 16 views
0

Visual Studioスタジオコマンドをプログラムで実行します。上記のコードを試しましたが、help.Allはプロジェクトのディレクトリにコマンドプロンプトを表示していません。Visual StudioコマンドプロンプトをVS 2015を使用して実用的に開くことができません

私は入力としてExecute( "VS140COMNTOOLS")を使用しました。

private void Execute(string vsEnvVar) { 

     var vsInstallPath = Environment.GetEnvironmentVariable(vsEnvVar); 

     if (Directory.Exists(vsInstallPath)) { 
      var filePath = vsInstallPath + "vsvars32.bat"; 
      if (File.Exists(filePath)) { 
       //start vs command process 
       Process proc = new Process(); 

       var command = Environment.GetEnvironmentVariable("ComSpec"); 
       command = @"" + command + @""; 

       //var batfile = @"E:\Test\vstest.bat"; 
       var args = string.Format("/S/K \" \"{0}\" \"", filePath); 

       proc.StartInfo.FileName = command; 
       proc.StartInfo.Arguments = args; 

       //proc.StartInfo.RedirectStandardInput = true; 
       //proc.StartInfo.RedirectStandardOutput = true; 
       proc.StartInfo.CreateNoWindow = false; 
       proc.StartInfo.UseShellExecute = false; 

       proc.Start(); 
      } else { 
       Console.WriteLine("File Does not exists " + filePath); 
      } 
     } 
    } 
+0

を書き込むことにより、任意のコマンドを実行することができますか? – BugFinder

答えて

0

はこれを試してみてください:

private Process Execute(string vsEnvVar) 
    { 
     Process process = new Process(); 
     ProcessStartInfo psi = new ProcessStartInfo("cmd.exe");//assume location is in path. Otherwise use ComSpec env variable 
     psi.CreateNoWindow = true; 
     psi.UseShellExecute = false; 
     psi.RedirectStandardError = true; 
     psi.RedirectStandardInput = true; 
     psi.RedirectStandardOutput = true; 
     psi.WindowStyle = ProcessWindowStyle.Hidden; 
     process.StartInfo = psi; 
     // attach output events 
     process.ErrorDataReceived += new DataReceivedEventHandler(process_ErrorDataReceived); 
     process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived); 
     process.StartInfo = psi; 
     process.Start(); 
     process.BeginErrorReadLine(); 
     process.BeginOutputReadLine(); 
     process.StandardInput.WriteLine(string.Format("call \"%{0}%vsvars32.bat\""), vsEnvVar); 
     process.StandardInput.Flush(); 
     return process; 
    } 

今、あなたはそれらの間のスペースをバッチファイルラウンド引用符の理由2つのたくさんprocess.StandardInput

process.StandardInput.WriteLine(@"msbuild c:\MySolution.sln /t:Clean"); 
+0

返信ありがとうございます。あなたのコードを試しましたが、依然として希望の結果を得ることができませんでした。 –

+0

私はコマンドプロンプトを開いて何も追加できませんでした。 –

+0

コードを少し修正しました。コマンドプロンプトウィンドウを表示しようとしています –

関連する問題