ユーザーの選択に応じて、特定の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]
セクションの先頭に移動する必要があります。
Reba McEntire が息子の Shelby Blackstock と共有しているクリスマスの伝統について学びましょう。
メーガン・マークルとマライア・キャリーが自然な髪の上でどのように結合したかについて、メーガンの「アーキタイプ」ポッドキャストのエピソードで学びましょう.
ハリー王子が家族、特にチャールズ王とウィリアム王子との関係について望んでいると主張したある情報源を発見してください。
ワイノナ・ジャッドが、母親のナオミ・ジャッドが亡くなってから初めての感謝祭のお祝いを主催しているときに、彼女が今では家長であることをどのように認識したかを学びましょう.
Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?
The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!
写真:ゲッティイメージズ。「最近の米国の選挙に関するロシアの活動と意図の評価」に関するFBI、CIA、およびNSAからの機密解除された文書は、「ロシアのウラジーミル・プーチン大統領が米国大統領選挙に影響を与えるキャンペーンを命じた」と主張している。
ペニーは、2006年7月6日、イリノイ州グレンビューのグレンビューコイン&コレクティブルズに展示されています。合計5,000ドル以上で、News-Starは報告します。
19世紀のフランスの版画サラ・バートマンのラベル・ホッテントットウィキメディア・コモンズ黒人女性の体の所有権の認識は、最も醜い歴史の断片に深く織り込まれている問題です。この有毒な考えは、地球の一部に隔離されていません。
写真:APマライアキャリーは、土曜日の夜にタイムズスクエアでディッククラークスの新年のロッキンイブウィズライアンシークレスト(このショーのタイトルはサウンドチェックを取得できますか?)のパフォーマンス中に、かなり深刻なオーディオの誤動作に苦しんでいました。最悪の問題は、キャリーの「エモーション」のパフォーマンス中に発生しました。トラックがキャリーのボーカルを断続的にしか再生せず、リップシンクをオフにしました。
ロシアのフィギュアスケーター、カミラ・バリエバが関与したドーピング事件が整理されているため、チームは2022年北京冬季オリンピックで獲得したメダルを待っています。
何千人ものAmazonの買い物客がMulberry Silk Pillowcaseを推奨しており、現在販売中. シルクの枕カバーにはいくつかの色があり、髪を柔らかく肌を透明に保ちます。Amazonで最大46%オフになっている間にシルクの枕カバーを購入してください
ラファイエット警察署は、「不審な男性が女性に近づいた」という複数の苦情を受けて、12 月にパデュー大学の教授の捜査を開始しました。
私たちの周りの世界と同じように、言語は常に変化しています。以前の時代では、言語の変化は数年または数十年にわたって発生していましたが、現在では数日または数時間で変化する可能性があります。
認知症を患っている 91 歳のアジア人女性が最近、47 番街のアウター サンセット地区でロメオ ロレンゾ パーハムに襲われました。伝えられるところによると、被害者はサンフランシスコの通りを歩いていたところ、容疑者に近づき、攻撃を受け、暴行を受けました。
“And a river went out of Eden to water the garden, and from thence it was parted and became into four heads” Genesis 2:10. ? The heart is located in the middle of the thoracic cavity, pointing eastward.
人々にチャンスを与えることは、人生で少し遅すぎると私は信じています。寛大に。