2017-10-27 14 views
-1

コンソールを表示するC#コンソールアプリケーションから子プロセスを作成しようとしています。私は次のように試みたが、ウィンドウは現れなかった。子プロセスウィンドウが表示されない

 ProcessStartInfo = new ProcessStartInfo(name) 
     { 
      UseShellExecute = false, 
      RedirectStandardError = true, 
      RedirectStandardOutput = true, 
      WindowStyle = ProcessWindowStyle.Maximized, 
      CreateNoWindow = false, 
      ErrorDialog = false 
     }; 

     if (args != null) 
     { 
      ProcessStartInfo.Arguments = args; 
     } 

     if (workingDirectory != null) 
     { 
      ProcessStartInfo.WorkingDirectory = workingDirectory; 
     } 

     Process = new Process {EnableRaisingEvents = true, StartInfo = ProcessStartInfo}; 
     Process.Start(); 
+0

'name'、' args'、 'workingDirectory'の値は何ですか? – mjwills

+0

名前は、このディスカッションの子コンソールアプリケーション(MyApp.exe)の名前です。作業中のworkingDirectoryが両方ともnullです。 –

答えて

0

親のコンソールで子プロセスを実行するための正しい方法は、セットアップにProcessStartInfoクラスのUseShellExecuteプロパティです。 timeコマンドを実行する例を考えてみましょう。なぜ時間?それは標準入力から読み込むためです。この方法で、どのコンソールが使用されているかを知ることができます。

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     var processInfo = new ProcessStartInfo 
     { 
      FileName = "cmd.exe", 
      Arguments = "/c time" 
     }; 

     Console.WriteLine("Starting child process..."); 
     using (var process = Process.Start(processInfo)) 
     { 
      process.WaitForExit(); 
     } 
    } 
} 

我々はtrueあるUseShellExecuteのデフォルト値を、左。これは、シェルが子プロセスに使用されることを意味します。シェルを使用すると、新しいコンソールが作成されます。

UseShellExecuteの値をfalseにフリップしましょう。

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     var processInfo = new ProcessStartInfo 
     { 
      UseShellExecute = false, // change value to false 
      FileName = "cmd.exe", 
      Arguments = "/c time" 
     }; 

     Console.WriteLine("Starting child process..."); 
     using (var process = Process.Start(processInfo)) 
     { 
      process.WaitForExit(); 
     } 
    } 
} 
+0

を少し変更して出力のリダイレクトを削除すると、ウィンドウが表示されます。助けてくれてありがとう –

関連する問題