3

現在、Innoスクリプトのこの部分にこれがあります

[Run]
Filename: {app}\bin\vcredist_x86.exe; Parameters: "/q:a /c:""VCREDI~3.EXE /q:a /c:""""msiexec /i vcredist.msi /qn"""" """; WorkingDir: {app}\bin; StatusMsg: Installing Visual Studio 2010 C++ CRT Libraries...

アプリのインストール中に vcredist インストーラーが実行されます。しかし、これの問題は、ユーザーが既にインストールしている場合、次のようなものをスローすることです

  • 修理/削除
  • すでに新しいバージョンが検出されました

これを回避し、必要な場合にのみこのインストーラーを実行する方法はありますか? Inno スクリプトに何を追加すればよいですか?

編集:

@Johnリンクの助けを借りて、次の機能を追加して作成しました

また、このサイトを参照して Visual Studio 2010 crt++ 製品コードを取得し、レジストリの Uninstall フォルダーを使用して、インストールされているかどうかを検出しました。

function InitializeSetup(): Boolean;
var
  ErrorCode: Integer;
  RedistInstalled : Boolean;
  Result1 : Boolean;
begin
  RedistInstalled := RegKeyExists(HKLM,'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{196BB40D-1578-3D01-B289-BEFC77A11A1E}');
  if RedistInstalled then
  begin
    Result := true;
  end else
  begin
    RedistInstalled := RegKeyExists(HKLM,'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{196BB40D-1578-3D01-B289-BEFC77A11A1E}');
    if RedistInstalled then
    begin
      Result := true;
    end else
    begin
      Result1 := MsgBox('This setup requires Microsoft Visual C++ 2010 Redistributable Package (x86). Please install Visual C++ 2010 Redistributable Package (x86) and run this setup again.  '#13#10' '#13#10'Do you want to download Microsoft Visual C++ 2010 Redistributable Package (x86) now?',
        mbConfirmation, MB_YESNO) = idYes;
      if Result1 =false then
      begin
        Result:=false;
      end else
      begin
        Result:=false;
        ShellExec('open',
          'http://download.microsoft.com/download/5/B/C/5BC5DBB3-652D-4DCE-B14A-475AB85EEF6E/vcredist_x86.exe',
          '','',SW_SHOWNORMAL,ewNoWait,ErrorCode);
      end;
    end;
  end;
end;

ただし、インストーラーがダウンロード/インストール後に続行するか、含まれている(セットアップで)インストーラーを実行する以前のコードを何らかの方法で適応させることができれば、それでもいいでしょう。

 [Run]
    Filename: {app}\bin\vcredist_x86.exe; Parameters: "/q:a /c:""VCREDI~3.EXE /q:a /c:""""msiexec /i vcredist.msi /qn"""" """; WorkingDir: {app}\bin; StatusMsg: Installing Visual Studio 2010 C++ CRT Libraries...

しかし、これでも十分です。

4

3 に答える 3

0

私は「公式の」MSのやり方に従います https://stackoverflow.com/a/199783/866333。まだバイラルになっているわけではありませんが、私にとってはうまくいきます。

Inno Setupを参照してください: .NET 4.0 がインストールされていることを確認して、コードが 1 つのバージョンだけを検出できるようにします。

これは私が実際に使用するコードの最良の例です: http://www.vincenzo.net/isxkb/index.php?title=.NET_-_Detect_framework

上記はすべて .NET フレームワークを対象としています。VCRT の場合、VC2010 から再頒布可能ファイルを抽出し、InnoSetup でコンテンツをアプリケーションのターゲット インストール ディレクトリにコピーします。そうすれば、システム ファイルは変更されません。

于 2012-06-11T15:13:57.710 に答える