web-dev-qa-db-ja.com

コンソールウィンドウを乱すことなくC#でプロセスを起動する

プロセスを起動する方法を見つけます。しかし、私の問題はコンソールウィンドウ(この場合は7z)が最前面に表示され、視界を遮り、文章を中断したり、数秒ごとにフォーカスを外したりすることです。その非常に迷惑な、どのように私はそれが起こるのを防ぐのですか。 CreateNoWindowはそれを解決すると思ったが、それはしなかった。

注:コンソールでユーザー入力が必要な場合があります(ファイルを交換するかどうか)。したがって、完全に非表示にすることは問題になる場合があります。

これが私の現在のコードです。

void doSomething(...)
{
    myProcess.StartInfo.FileName = ...;
    myProcess.StartInfo.Arguments = ...;
    myProcess.StartInfo.CreateNoWindow = true;
    myProcess.Start();
    myProcess.WaitForExit();
}
54
user34537

私が正しく思い出せば、これは私のために働いた

Process process = new Process();

// Stop the process from opening a new window
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;

// Setup executable and parameters
process.StartInfo.FileName = @"c:\test.exe"
process.StartInfo.Arguments = "--test";

// Go
process.Start();

私はこれをC#コンソールアプリケーション内から使用して別のプロセスを起動しましたが、アプリケーションが別のウィンドウで起動するのを停止し、代わりにすべてを同じウィンドウに保持しました。

84
Mun

@galetsあなたの提案では、ウィンドウは作成されたままで、最小化され始めます。これは、acidzombie24が望んだことを実際に実行するためによりよく機能します。

myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
20
codefox

これを試して:

myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
3
galets

再確認する必要がありますが、UseShellExecute = false。これにより、標準出力/エラーストリームをキャプチャすることもできます。

3
Paul Alexander