6

SO に関するいくつかの投稿の推奨に従って、InnoTools Downloader を使用して、Inno セットアップのインストール スクリプト中にアプリのサード パーティの依存関係をインストールしようとしました。

残念ながら、InnoTools Downloader は数年間更新されておらず、現在の Inno Tools セットアップ (現在、私のマシンの 5.5.2 (u)) と互換性がないように見え始めています。ITD の PChar パラメータは PAnsiChar パラメータに置き換えられました。さまざまな ITD_xxx プロシージャを実行しようとすると、さまざまな程度の失敗が発生します。

  • ITD_DownloadFiles型の不一致エラーが発生し、Inno Setup でコンパイルされません
  • ITD_DownloadFileコンパイルされますが、表示されるファイルの長さは 6KB であり、実行できません。

新しい Inno (post-5.3.0) Unicode バージョンで ITP を実行した人はいますか? または、別の解決策を探す必要がありますか?

編集 物事を少し明確にするために、it_download.iss ファイルにアクセスして、PChar のすべてのインスタンスを PAnsiChar に置き換えてみました。これにより、最初に ITD をセットアップ スクリプトに統合しようとしたときのコンパイル エラーを回避できました。

Inno スクリプトのサンプル セクションを次に示します。

[Code]
procedure InitializeWizard();
begin
  ITD_Init; // initialize the InnoTools Downloader
  // install 3rd party tool (ex. Git) from the internet.
  if ITD_DownloadFile('http://git-scm.com/download/win',expandconstant('{tmp}\GitInstaller.exe'))=ITDERR_SUCCESS then begin
     MsgBox(expandconstant('{tmp}\GitInstaller.exe'), mbInformation, MB_OK);
     Exec(ExpandConstant('{tmp}\GitInstaller.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, tmpResult);
  end
end;

これを実行すると、ファイルを「ダウンロード」して保存した場所を示すダイアログが表示されます。私のマシンでは、c:\Users\\AppData\Local\Temp のサブディレクトリにあります。http://git-scm.com/download/winからダウンロードしたファイルは現在 15,221KB ですが、このファイルは 6KB です。

このITP_DownloadAfter方法でも同様の結果が得られます。

4

1 に答える 1

9

PCharすべての型の出現を で置き換えることを除いて、ファイル内の型PAnsiCharのすべての出現を で置き換える必要があります。次の問題は、取得しようとしている URL です。そのサイトがリダイレクトするバイナリ ファイルではなく、HTML ドキュメントをダウンロードしているため、ファイルのサイズは予想とは異なります。そのため、ITD が Unicode に対応している場合は、スクリプト内の URL を. ITD は現在 SSL をサポートしていないため、HTTPS を使用しなかったことに注意してください。コード証明は次のようになります。stringAnsiStringit_download.issdirect binary URL

[Code]
const
  GitSetupURL = 'http://msysgit.googlecode.com/files/Git-1.8.4-preview20130916.exe';

procedure InitializeWizard;
var
  Name: string;
  Size: Integer;
begin
  Name := ExpandConstant('{tmp}\GitInstaller.exe');

  ITD_Init;  
  if ITD_DownloadFile(GitSetupURL, Name) = ITDERR_SUCCESS then
  begin
    if FileSize(Name, Size) then
      MsgBox(Name + #13#10 + 'Size: ' + IntToStr(Size) + ' B',
        mbInformation, MB_OK)
    else
      MsgBox('FileSize function failed!', mbError, MB_OK);
  end;
end;
于 2013-10-17T20:03:30.713 に答える