次の行があります。
[Run]
Filename: "{app}\MyApp.exe"; Flags: postinstall nowait
チェックボックスを表示せずにアプリを開始したいと思います(ユーザーがそうすることができなくなります)。
誰か教えてくれませんか?ありがとうございました。
次の行があります。
[Run]
Filename: "{app}\MyApp.exe"; Flags: postinstall nowait
チェックボックスを表示せずにアプリを開始したいと思います(ユーザーがそうすることができなくなります)。
誰か教えてくれませんか?ありがとうございました。
私が考えることができるいくつかのオプションがあります。1 つ目は、スクリプトのセクションからアプリケーションを実行することです[Code]
。2 つ目は、セクション エントリのチェック ボックスを無効にすることです[Run]
。3 つ目は、RunList
.
チェックボックスを追加して後で非表示にするよりも簡単なので、個人的にはこの方法を好みます。[Run]
現在のセクション エントリを削除し、NextButtonClick
イベント メソッドから次の関数のいずれかを呼び出します。これは、そのパラメーターが[終了] ボタンのクリックを示す にCurPageID
等しい場合です。wpFinished
Exec
- セットアップ/アンインストールと同じ資格情報を使用して、指定された実行可能ファイルまたはバッチ ファイルを実行します。ExecAsOriginalUser
- 最初にセットアップを開始したユーザーの (通常は昇格されていない) 資格情報を使用して、指定された実行可能ファイルまたはバッチ ファイルを実行します。ShellExec
- セットアップ/アンインストールと同じ資格情報を使用して、指定されたファイルを開くか、Verb で指定された別のアクションを実行します。ShellExecAsOriginalUser
- 最初にセットアップを開始したユーザーの (通常は昇格されていない) 資格情報を使用して、指定されたファイルを開くか、Verb で指定された別のアクションを実行します。runascurrentuser
norフラグを使用していないためshellexec
、セットアップは内部的に次のような関数を呼び出します。
function NextButtonClick(CurPageID: Integer): Boolean;
var
ResultCode: Integer;
begin
Result := True;
if CurPageID = wpFinished then
ExecAsOriginalUser(ExpandConstant('{app}\MyApp.exe'), '', '',
SW_SHOWNORMAL, ewNoWait, ResultCode);
end;
このソリューションの弱点の 1 つは、セットアップによって再起動が要求された場合でも、プログラムが実行されることです。この要求を判断するための欠落している可能性を回避するには、YesRadio
が表示されているかどうか ([はい、今すぐコンピューターを再起動します] ラジオ ボタン) が選択されているかどうかを確認します。これは、ユーザーがコンピューターを再起動するように求められ、それを確認したことを意味します。再起動要求を考慮したバージョンは次のとおりです。
function NextButtonClick(CurPageID: Integer): Boolean;
var
ResultCode: Integer;
begin
Result := True;
// if the "Finish" button was clicked and "Yes, restart the computer now"
// radio button was either not visible or not selected that time, then...
if (CurPageID = wpFinished) and ((not WizardForm.YesRadio.Visible) or
(not WizardForm.YesRadio.Checked))
then
ExecAsOriginalUser(ExpandConstant('{app}\MyApp.exe'), '', '',
SW_SHOWNORMAL, ewNoWait, ResultCode);
end;
もう 1 つのオプションは、チェック ボックスを無効にすることです。ユーザーは、アプリケーションが実行されることを確認できますが、それに対して何もすることはできません (もちろん、タスク マネージャーからセットアップを強制終了する以外は)。今回は、[Run]
セクション エントリをそのままにしますが、セクションRunList
から次のように変更します。[Code]
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName=My Program
[Files]
Source: "MyApp.exe"; DestDir: "{app}"
[Run]
Filename: "{app}\MyApp.exe"; Flags: postinstall nowait
[Code]
procedure CurPageChanged(CurPageID: Integer);
begin
// you must do this as late as possible, because the RunList is being modified
// after installation; so this will check if there's at least one item in the
// RunList and then set to the first item (indexing starts at 0) Enabled state
// to False
if (CurPageID = wpFinished) and (WizardForm.RunList.Items.Count > 0) then
WizardForm.RunList.ItemEnabled[0] := False;
end;
これは、2 番目のオプションとは対照的に、要求したことを実行します。チェックボックスを非表示のままにするか、より正確には、全体を非表示にするため、フラグが指定されたセクションにRunList
複数のエントリがある場合、それも表示されません。[Run]
postinstall
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName=My Program
[Files]
Source: "MyApp.exe"; DestDir: "{app}"
[Run]
Filename: "{app}\MyApp.exe"; Flags: postinstall nowait
[Code]
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpFinished then
WizardForm.RunList.Visible := False;
end;