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();
コンソールウィンドウを表示せずにプロセスを開始しようとすると、同様の問題が発生しました。希望する動作を示すプロパティ値が見つかるまで、プロパティ値のいくつかの異なる組み合わせでテストしました。
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;
}
プロセス(Wix light.exe)が本質的に昼食に出かけ、夕食に間に合うように帰宅しないという、この答えには不運でした。ただし、以下は私にとってはうまくいきました。
Process p = new Process();
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
// etc, then start process
これでうまくいくはずです。
システム参照を追加します。
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();
これはウィンドウを表示しません:
Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
cmd.StartInfo.CreateNoWindow = true;
...
cmd.Start();