web-dev-qa-db-ja.com

Process.Start C#からコンソールウィンドウを非表示にする

System.Diagnostics.Processクラスを使用して、リモートマシンでプロセスを作成しようとしています。プロセスを作成できます。しかし問題は、サービスの作成に時間がかかり、コンソールウィンドウが表示されることです。もう1つの面倒なことは、コンソールウィンドウが私のウィンドウフォームの上に表示され、そのフォームに対して他の操作ができないことです。 CreateNoWindow = trueなどのすべてのプロパティを設定しました。

proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden

それでも、コンソールウィンドウは表示されます。私も出力とエラーを別々のストリームにリダイレクトしましたが、運はありません。

コンソールウィンドウを非表示にする他の方法はありますか?私を助けてください 。

Scコマンドを実行するために使用したコードの一部を次に示します。

Process proc = new Process();
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.StartInfo.FileName = "sc";
proc.StartInfo.Arguments = string.Format(@"\\SYS25 create MySvc binPath= C:\mysvc.exe");
proc.StartInfo.RedirectStandardError = false;
proc.StartInfo.RedirectStandardOutput = false;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
proc.WaitForExit();
89
Prasad

コンソールウィンドウを表示せずにプロセスを開始しようとすると、同様の問題が発生しました。希望する動作を示すプロパティ値が見つかるまで、プロパティ値のいくつかの異なる組み合わせでテストしました。

UseShellExecuteプロパティをfalseに設定する必要がある理由を詳しく説明したページを次に示します。
http://msdn.Microsoft.com/en-us/library/system.diagnostics.processstartinfo.createnowindow.aspx

ページの備考セクションの下:

UseShellExecuteプロパティがtrueの場合、またはUserNameプロパティとPasswordプロパティがnullでない場合、CreateNoWindowプロパティ値は無視され、新しいウィンドウが作成されます。

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = fullPath;
startInfo.Arguments = args;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;

Process processTemp = new Process();
processTemp.StartInfo = startInfo;
processTemp.EnableRaisingEvents = true;
try
{
    processTemp.Start();
}
catch (Exception e)
{
    throw;
}
110
John Bartels

プロセス(Wix light.exe)が本質的に昼食に出かけ、夕食に間に合うように帰宅しないという、この答えには不運でした。ただし、以下は私にとってはうまくいきました。

Process p = new Process();
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
// etc, then start process
49
John Lockwood

これでうまくいくはずです。


システム参照を追加します。

using System.Diagnostics;

次に、このコードを使用して、非表示のCMDウィンドウでコマンドを実行します。

Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
cmd.StartInfo.Arguments = "Enter your command here";
cmd.Start();
15

これはウィンドウを表示しません:

Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
cmd.StartInfo.CreateNoWindow = true;

...
cmd.Start();
3