ユーザーの選択に応じて、特定のredistツールのインストールを管理するためのカスタムページを作成しました。
これらのツールは、ユーザーがこれらのツールをインストールするかどうかを確認するチェックボックスにリンクされています。次に、そこにのみページが表示され、各ツールのインストールの進行状況がユーザーに表示されます。
ここでの問題は、ツールのセットアップの最初のExtractTemporaryFileが完了したときにのみ進行状況ページが表示され、最後のページがフリーズしたかのように表示されることです。
ExtractTemporaryFileが発生する前に進行状況ページを表示させる唯一の方法は、インストール関数の前にMsgBoxを配置することです。ただし、この場合でも、ExtractTemporaryFileを起動すると、ExtractTemporaryFileが完了するまでプログレスバーアニメーションがフリーズします...
これを行うコードの一部は次のとおりです。
procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=PageInstallationPersonnalisee.ID then
begin
ProgressBarLabelPageInstPerso.Caption := 'Initialisation...';
if InstallTool1 = True then
begin
ProgressBarLabelPageInstPerso.Caption := 'Installing InstallTool1...';
F_InstallTool1();
end;
if InstallTool2 = True then
begin
ProgressBarLabelPageInstPerso.Caption := 'Installing InstallTool2...';
F_InstallTool2();
end;
if InstallTool3 = True then
begin
ProgressBarLabelPageInstPerso.Caption := 'Installing InstallTool3...';
F_InstallTool3();
end;
ProgressBarPageInstPerso.Style := npbstMarquee;
//ProgressBarPageInstPerso.Style := npbstNormal;
ProgressBarPageInstPerso.Position := 100;
CancelWithoutPrompt:=True;
WizardForm.Close;
end;
end;
ExtractTemporaryFile()
各F_InstallTooln()
関数で作成されていることに注意してください。
役立つ可能性のあるセットアップセクションとファイルセクションの他の部分:
[Setup]
SolidCompression=no
[Files]
;Temporary redists
Source: "{#MyRessourcesPath}InstallTool1_Setup.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall noencryption dontcopy
Source: "{#MyRessourcesPath}InstallTool2_Setup.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall noencryption dontcopy
Source: "{#MyRessourcesPath}InstallTool3_Setup.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall noencryption dontcopy
ここでは、PageInstallationPersonnaliseeのページは、最初のExtractTemporaryFileが完了するまで表示されません。
ExtractTemporaryFileによってインストールプロセスが遅れる可能性があることは承知していますが、なぜウィザードがフリーズする必要があるのでしょうか。
だから私の質問は:私のシナリオでは、ExtractTemporaryFileプロシージャが起動される前にウィザードが表示されるようにウィザードを強制的に更新する方法はありますか?
ExtractTemporaryFile
本当にウィザード形式をハングアップします。ほとんどのコードがそうであるように。
Windowsメッセージキューを強制的に送り出すことができる唯一のカスタムページはTOutputProgressWizardPage
(によって作成されたCreateOutputProgressPage
)です。
あなたはこのようなことをすることができます:
function NextButtonClick(CurPageID: Integer): Boolean;
var
ProgressPage: TOutputProgressWizardPage;
begin
if CurPageID = wpReady then
begin
ProgressPage := CreateOutputProgressPage('Preparing installations', '');
ProgressPage.Show;
try
ProgressPage.Msg1Label.Caption := 'Installing 1 ...';
ProgressPage.SetProgress(0, 100);
ExtractTemporaryFile('1.exe');
Exec(...);
ProgressPage.Msg1Label.Caption := 'Installing 2 ...';
ProgressPage.SetProgress(33, 100);
ExtractTemporaryFile('2.exe');
Exec(...);
ProgressPage.Msg1Label.Caption := 'Installing 3 ...';
ProgressPage.SetProgress(66, 100);
ExtractTemporaryFile('3.exe');
Exec(...);
ProgressPage.SetProgress(100, 100);
ProgressPage.Hide;
finally
end;
end;
Result := True;
end;
SetProgress
頻繁に呼び出すことができない場合は、アニメーション付きの派手なプログレスバーがある最新バージョンのWindowsでも、あまりうまく機能しません。SetProgress
呼び出しは、バックグラウンドでメッセージキューをポンプするものであることに注意してください。したがって、パラメータが変更されていない場合でも、それを呼び出すことは理にかなっています。しかし、ExtractTemporaryFile
ブロックとしてはできません。
または、デプロイメントを[Files]
セクションに任せて、AfterInstall
イベントからインストーラーを実行することもできます。
[Files]
;Temporary redists
Source: "{#MyRessourcesPath}InstallTool1_Setup.exe"; DestDir: "{tmp}"; \
Flags: deleteafterinstall noencryption dontcopy; AfterInstall: Install1
Source: "{#MyRessourcesPath}InstallTool2_Setup.exe"; DestDir: "{tmp}"; \
Flags: deleteafterinstall noencryption dontcopy; AfterInstall: Install2
Source: "{#MyRessourcesPath}InstallTool3_Setup.exe"; DestDir: "{tmp}"; \
Flags: deleteafterinstall noencryption dontcopy; AfterInstall: Install3
これが古いスレッドであることは知っていExtractTemporaryFile
ますが、関数を使用して抽出したファイルの一部が他のファイルよりも大幅に遅いという同様の状況に直面していました。
調査の結果、InnoSetupのヘルプページでこれを見つけました。
確実な圧縮が有効になっている場合は、[ファイル]セクションの上部(またはその近く)に一時ファイルをリストしてください。ソリッド圧縮インストールで任意のファイルを抽出するには、セットアップは最初に以前のすべてのファイルを(メモリ内の一時バッファに)解凍する必要があります。[ファイル]セクションで指定されたファイルの上に他の多くのファイルがリストされている場合、これにより大幅な遅延が発生する可能性があります。
つまり、最適なパフォーマンスを得るには、その関数を使用して抽出するファイルを[Files]
セクションの先頭に移動する必要があります。
特徴的なスターのコリン・エッグレスフィールドは、RomaDrama Liveでのスリル満点のファンとの出会いについて料理しました!加えて、大会での彼のINSPIREプログラム。
ノーザンエクスポージャーが90年代の最も人気のある番組の1つになった理由を確認するには、Blu-rayまたはDVDプレーヤーをほこりで払う必要があります。
ドミニカのボイリング湖は、世界で2番目に大きいボイリング湖です。そこにたどり着くまでのトレッキングは大変で長いですが、努力する価値は十分にあります。
ジョー・バロウロー対ウェイド事件の転覆に対応するNFLは、言葉を言わないことで、腹立たしいが予測可能なPRの結果でした。
(lから)パット・ペレス、ブルックス・ケプカ、パトリック・リードサウジアラビアのLIVゴルフリーグのさらに別の信じられないほどの記者会見で、スポーツのファンはブルックス・ケプカからでたらめな吐き気と質問回避の驚異的なマスタークラスを受けました。パトリックリード、ブライソンデシャンボー、パットペレス、最近のPGAツアーの脱北者。
暗号業界最大の沈没船の1つであるスリーアローズキャピタルは、ついにその悲惨さから解放されています。火曜日に、不良債権ヘッジファンドは、債権者からの返済を要求する訴訟の高まりに応えて、バージンアイランド裁判所によって清算を命じられました彼らが3ACに行ったローン。
Zendaya shared a sweet photo in honor of boyfriend Tom Holland's 26th birthday Wednesday
シーレン「Ms.JuicyBaby」ピアソンは、先月脳卒中で入院した後、「もう一度たくさんのことをする方法を学ばなければならない」ため、言語療法を受けていることを明らかにしました。
オスカー受賞者の世紀半ばの家には、3つのベッドルーム、2つのバス、オーシャンフロントの景色があります。
Mais um mês se findando — e metade do ano de 2022 já passou. Sabe o que isso significa? Não, não é hora de verificar se você está cumprindo com suas resoluções de Ano Novo.
1.ドラマを見た後、起業する考えはありますか?あなたのビジネスはボトルネックに遭遇しましたか?方向性がなくてわからない場合は、ドラマを追いかけて行くことを心からお勧めします。(?)ブラフではなく、最も完璧なビジネス例を隠すドラマがあります。2.ブレイキング・バッドとその弁護士ドラマ「ブレイキング・バッド」を見た友人たちは、演劇の中で、穏やかな表情で、弁護士のソウル・グッドマンに深く感銘を受けなければなりません。口を開けて、感覚の弱い傭兵の性格を持っています。道徳の面で、サル・グッドマンは無意識のうちに劇に欠かせない役割を果たし、彼自身のシリーズ「絶望的な弁護士」(ベター・コール・ソール)を生み出しました。ウェントウのテキストとビデオは、劇中のソウル・グッドマンのテレビコマーシャルです。製品(サービス)、競争戦略、市場ポジショニング、ブランド名、ターゲット顧客グループ、コミュニケーション軸から広告まで、サル・グッドマンの役割のビジネス設定は、「最低」と見なすことができる超超超超超超完全です。ブランドコミュニケーションのコスト」「変化」のモデル。なぜ?私の分析をご覧ください。3.ソウル・グッドマンの「事業戦略」1.基本情報ブランド名:Saul Goodman製品:法律相談サービス対象顧客:麻薬中毒、飲酒運転、事故など。法律知識の欠如は、一般的に公立弁護士にしか余裕がなく、真面目な弁護士も「特別な法律を持つ消費者」を避けます。恐れてはいけない「ニーズ」。コミュニケーションの主軸:この国のすべての男性、女性、子供は有罪判決を受けるまで無実だと思います。地域:アルバカーキ市スローガン:Thrallに電話したほうがいいです!(ベター・コール・ソール)広告:2つの可能性のある犯罪状況をシミュレートします+サウルの主張+サウルのスローガン2をより適切に呼び出します。