7

.NETFW3.5がすでにインストールされているかどうかを確認する必要があるアプリケーションがあります。すでにインストールされている場合は、MicrosoftのWebサイトからダウンロードしてインストールを停止するようにユーザーに求めるメッセージボックスを開きます。

次のコードが見つかりました。教えていただけますか:

a)この関数はどこから呼び出す必要がありますか?b).NET FW 3.5以降のバージョンがすでにインストールされているかどうかを確認する必要がありますか?例:FW 4.0がインストールされている場合-3.5をインストールするために必要ですか?

ありがとうございました

function IsDotNET35Detected(): Boolean;
var
  ErrorCode: Integer;
  netFrameWorkInstalled : Boolean;
  isInstalled: Cardinal;
begin
  result := true;

  // Check for the .Net 3.5 framework
  isInstalled := 0;
  netFrameworkInstalled := RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5', 'Install', isInstalled);
  if ((netFrameworkInstalled)  and (isInstalled <> 1)) then netFrameworkInstalled := false;

  if netFrameworkInstalled = false then
  begin
    if (MsgBox(ExpandConstant('{cm:dotnetmissing}'), mbConfirmation, MB_YESNO) = idYes) then
    begin
      ShellExec('open',
      'http://www.microsoft.com/downloads/details.aspx?FamilyID=333325fd-ae52-4e35-b531-508d977d32a6&DisplayLang=en',
      '','',SW_SHOWNORMAL,ewNoWait,ErrorCode);
    end;
    result := false;
  end;

end;
4

1 に答える 1

7

インストールの開始時、ウィザード フォームが表示される前にチェックを実行する場合は、InitializeSetupイベント ハンドラを使用します。そのハンドラに False を返すとセットアップは中止され、True の場合はセットアップが開始されます。あなたが投稿した少し最適化されたスクリプトは次のとおりです。

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program

[CustomMessages]
DotNetMissing=.NET Framework 3.5 is missing. Do you want to download it ? Setup will now exit!

[Code]
function IsDotNET35Detected: Boolean;
var
  ErrorCode: Integer;
  InstallValue: Cardinal;  
begin
  Result := True;
  if not RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5', 
    'Install', InstallValue) or (InstallValue <> 1) then
  begin
    Result := False;
    if MsgBox(ExpandConstant('{cm:DotNetMissing}'), mbConfirmation, MB_YESNO) = IDYES then
      ShellExec('', 'http://www.microsoft.com/downloads/details.aspx?FamilyID=333325fd-ae52-4e35-b531-508d977d32a6&DisplayLang=en',
        '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
  end;
end;

function InitializeSetup: Boolean;
begin
  Result := IsDotNET35Detected;
end;
于 2012-10-19T15:00:37.243 に答える