DOBON.NET DOBON.NETプログラミング掲示板過去ログ

最小化でプログラムを実行したい

環境/言語:[Windows7 C# .NET4.0]
分類:[.NET]

はじめまして。

C#で外部アプリを最小化状態で起動させたいのですが、、、、、
Netをみて対応したのですが、どうしても最小化状態で起動できないです。

==============================================
System.Diagnostics.Process procObj = new System.Diagnostics.Process();
procObj.StartInfo.FileName = ExecutePath.FilePath;
procObj.StartInfo.WorkingDirectory = System.IO.Path.GetDirectoryName(ExecutePath.FilePath);
procObj.StartInfo.Arguments = Parameter;
procObj.StartInfo.UseShellExecute = false;
procObj.StartInfo.RedirectStandardOutput = true;
procObj.StartInfo.RedirectStandardError = true;
procObj.StartInfo.Verb = "Open";
procObj.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized;

//標準出力、エラー出力の送信イベントをハンドルする
string outputBuff = string.Empty;
procObj.OutputDataReceived += delegate(object sender, System.Diagnostics.DataReceivedEventArgs e)
{
outputBuff += e.Data;
};
string errorBuff = string.Empty;
procObj.ErrorDataReceived += delegate(object sender, System.Diagnostics.DataReceivedEventArgs e)
{
errorBuff += e.Data;
};

procObj.Start();
procObj.BeginOutputReadLine();
procObj.BeginErrorReadLine();
============================================

procObj.StartInfo.WindowStyle
ここで設定するという認識ですが、間違っているのでしょうか??
また、動作させるのにほかにも必要なことがあるのでしょうか??

申し訳ありませんが、教えていただければと思います。


よろしくお願いします。。
標準出力、エラー出力をリダイレクトしているってことは、対象はコンソールアプリケーションでしょうか?
CreateNoWindowプロパティを試してみてください。
// 「最小化」ではなく「新たなコンソールウィンドウが表示されない」ですが。
■No31395に返信(Hongliangさんの記事)
> 標準出力、エラー出力をリダイレクトしているってことは、対象はコンソールアプリケーションでしょうか?
> CreateNoWindowプロパティを試してみてください。
> // 「最小化」ではなく「新たなコンソールウィンドウが表示されない」ですが。

回答ありがとうございます。
やりたいことは、コンソールアプリではなく、通常のアプリ実行を想定しています。

> CreateNoWindowプロパティを試してみてください。

試してみたのですが、普通に起動してしまいますね。

ほかに想定できる要因があったりはするのでしょうか???

申し訳ありませんが、よろしくお願いします。
■No31394に返信(junjunさんの記事)
> C#で外部アプリを最小化状態で起動させたいのですが、、、、、
> Netをみて対応したのですが、どうしても最小化状態で起動できないです。

最小化起動できるかどうかは、起動するアプリケーション次第です。
たとえば、C++ でいうところの WinMain の nShowCmd を無視するようなアプリ
(WinXP の Calc.exe など)の場合、起動時パラメータでは指定できません。

デスクトップなどに、相手先 EXE へのショートカットファイルを作成し、
そのプロパティで「最小化」を指定してみてください。その指定で
最小化されないようであれば、StartInfo 指定では解決できません。

起動時に最小化できないタイプのアプリでは、「起動後」に
ShowWindow API などで最小化させるといった回避策を検討してみてください。
魔界の仮面弁士さん、回答ありがとうございます。
ショートカットを作成してでの最小化対応はすることができました。
なので、最小化ができないアプリというわけではないと思われます。
(Notepadでもできなかったので、、、、)

そうなると、起動後に変えるしかないということですかね。

なぜ、
>procObj.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized;
この設定をしても、期待通りの動作がされないのかがわかりませんが、、、、
■No31417に返信(junjunさんの記事)
> >procObj.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized;
> この設定をしても、期待通りの動作がされないのかがわかりませんが、、、、

UseShellExecute を true にすれば最小化されるかと思います。
そのかわり、標準入出力を扱えなくなってしまいますけれどね。
■No31418に返信(魔界の仮面弁士さんの記事)
> ■No31417に返信(junjunさんの記事)
>>>procObj.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized;
>>この設定をしても、期待通りの動作がされないのかがわかりませんが、、、、
>
> UseShellExecute を true にすれば最小化されるかと思います。
> そのかわり、標準入出力を扱えなくなってしまいますけれどね。

回答しておらず申し訳ないです。
結局のところは、UseShellExecute これが要因でした。

どちらも満足することができないと分かったので、標準入出力をあきらめて、
逆に標準入出力が必要であればWindowStyleの指定はあきらめることにしました。

原因がわかってすっきりしました。

回答いただいた方々、協力ありがとうございました!!

では、、、、、
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板