私は前提条件を必要とするwpfアプリケーションを作成しています。その前提条件が満たされていない場合は、ユーザに、前提条件をインストールするかどうか尋ねます:Microsoft Visual C++ 2010 SP1 Redistributable Package。サイレントプロセス/プログラムを実行
ユーザが前提条件をインストールすることを選択した場合、私はvcredist_x86.exe(これは私が提供した最初のリンクからダウンロードされるファイルです)を実行します。
その後、私のアプリケーション上で、私はインストールのようなものを実行して、完了したときに伝えることができるようになります:
ProcessStartInfo psi = new ProcessStartInfo(@"vcredist_x86.exe");
var p = new Process(); p.StartInfo = psi;
p.Start(); //start the process
p.WaitForExit(); // wait for the installation to finish
// installation should be done now
[OK]を、すべてがこれまでに素晴らしい作品。 問題は私のwpfアプリケーションにプログレスバーがあり、そこに進捗状況を示すことです。
私は、次の手順を実行して、インストールの進捗状況を示すことができた:
それは単純なタスクを自動化するための素晴らしいですAutoItと呼ばれるプログラムがあります。たとえば、次のようなものを使用してウィンドウがautoitで存在するかどうかを簡単に検出できます。
次に、このスクリプトをコンパイルし、非常に小さな実行可能ファイルを作成することができました。 その実行可能ファイルでは、指定されたウィンドウが存在する場合は1を返します。そうでない場合はです。
ユーザーが次のウィンドウに移動すると、スクリプトが2と表示される可能性があります。そのウィンドウは別のウィンドウです。 AutoItはまた、ウィンドウの進行状況バーの進行状況を見ることができます!そのスクリプトが例えば80を返した場合、私は80%に進捗を更新します。
// start the autoitExecutable....
// wait for executable to exit usually takes 10 miliseconds it is fast
if (autoitProcess.ExitCode == 1)
{
// do somthing
}else if(autoitProcess.ExitCode == 2)
{
// do something else
} //etc....
あなたは、私がそのスクリプトにWPFの私のプログレスバーを更新するために行われた変更を検出するために、1秒ごとに実行する必要が見ることができるように:
私のような何かをすることによってそれを行います。それは動作しますが、毎回私は私が得るのC#で実行可能なことを実行します。それが再び表示され、次の第二に、約500ミリ秒
カーソルを。窓が現れなくても迷惑になります。私はそのカーソルを取り除き、何とかその実行ファイルを静かに実行できるといいですね。私がautoit実行可能ファイルを実行すると、表示されるウィンドウも何も表示されません。
P.S.
私は、ウィンドウの存在を確認するためにC#を使用することができ、autoitと同様に他のウィンドウのハンドラの値を見ることができますが、AutoItでこれらのプログラムを作成するのは簡単です素敵な私はtaks
これは、インストーラプロジェクト(前提条件チェック+インストール)で無料で提供されるもののための**多くの労力のようです。あなたのp.WaitForExit()上の – spender
私はそれを行う方法があることを知っているWhileループを試してみましたか? – MethodMan
別のスレッドでインストールをキックオフして、アニメーションを表示してください。 –