2011-03-21 7 views
67

System.Diagnostics.Processクラスを使用してリモートマシン上でプロセスを作成しようとしています。 私はプロセスを作成することができます。しかし、問題は、サービスの作成に時間がかかり、コンソールウィンドウが表示されることです。 別の厄介なことは、コンソールウィンドウが私のWindowsフォームの上に表示され、そのフォーム上で他の操作を実行できないことです。 私はCreateNoWindow = trueProcess.Startからコンソールウィンドウを隠すC#

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(); 
+0

'proc.StartInfo.RedirectedStandardOutput = true'を設定しましたか?私はこれをWindowsアプリケーションで動作させるようにしました。 – Andrew

+0

完全なソースコードサンプルを扱った最終的な解決策はどれですか? – Kiquenet

+0

Windows *コンソール*アプリでは、UseShellExecute - リダイレクトを使用するか、それ以外のものを設定してください。 [here](https://stackoverflow.com/a/47781912/63209)を参照してください。 – Paul

答えて

86

コンソールウィンドウを表示せずに処理を開始しようとしたとき、私は同様の問題がありました。私は、私が望む振る舞いを示すものが見つかるまで、プロパティ値のいくつかの異なる組み合わせをテストしました。

ここでは、UseShellExecuteプロパティをfalseに設定する必要がある理由を詳述するページです。ページの備考セクションの下で
http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.createnowindow.aspx

あるUseShellExecuteプロパティがtrueであるか、UserNameと パスワードのプロパティが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; 
} 
+1

に追加の詳細を追加する必要がありますか? **理由**これは**の方法ではなく動作します**。 – aqua

+1

標準出力がウィンドウを強制的に使用しているためですか? –

+1

そして、あなたは 'startInfo 'を設定せずに標準出力をリダイレクトすることはできません。UseShellExecute = false; ' –

36

私は、プロセス(ウィックスのlight.exe)基本的にランチに出かけると夕食に間に合うように家に来ていないと、この答えに悪い運を持っていました。しかし、以下は私のためにうまくいった:

Process p = new Process(); 
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
// etc, then start process 
+2

私のために働いた - いいとシンプル! –

+2

これは本当に受け入れられた答えです。魅力のように動作します。 – Eternal21

+4

動作しません。プロセスはまだウィンドウを表示します。 – Omarrrio

9

これは私のために働くはずです。そうしよう。

システムリファレンスを追加してください。

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(); 
関連する問題