3

InnoSetupを使用して、作成したアプリケーションをインストールしています。私のクライアントは、このInnoSetupアドオンを使用して、インストール時に最新のDLLをダウンロードするように要求しています。

http://www.sherlocksoftware.org/page.php?id=50

十分に単純です。思い通りに動作しましたが、[ファイル]セクションがないと(スクリプトに組み込むのではなくダウンロードするため)、ダウンロードしたDLLをGACに登録する方法がわかりません。[ファイル]セクションで、フラグgacinstallを使用していまし

[ファイル]を使用しなくなったので、Pascalスクリプトを使用してDLLをGACにインストールする方法があるかどうか疑問に思いました。

これが私のセットアップスクリプトの関連部分です:

[Code]
procedure InitializeWizard();
begin
 itd_init;

 itd_addfile('{#DownloadLocation}/mylibrary1.dll',expandconstant('{tmp}\mylibrary1.dll'));
 itd_addfile('{#DownloadLocation}/mylibrary2.dll',expandconstant('{tmp}\mylibrary1.dll'));

 itd_downloadafter(wpReady);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
 if CurStep=ssInstall then begin //Lets install those files that were downloaded for us     
  filecopy(expandconstant('{tmp}\mylibrary1.dll'),expandconstant('{app}\mylibrary1.dll'),false);
  filecopy(expandconstant('{tmp}\mylibrary2.dll'),expandconstant('{app}\mylibrary2.dll'),false);
 end;
end;


[Run]
Filename: "{app}\{#MyAppExeName}"; Parameters: "-i"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, "&", "&&")}}"; Flags: runhidden  
Filename: "{app}\{#MyAppSvcName}"; Parameters: "-i"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, "&", "&&")}}"; Flags: runhidden
Filename: "{app}\{#MyAppExeName}"; Description: "Launch the ItraceIT configuration tool"; Flags: postinstall nowait skipifsilent

[UninstallRun]
Filename: "{app}\{#MyAppSvcName}"; Parameters: "-u"; Flags: runhidden
Filename: "{app}\{#MyAppExeName}"; Parameters: "-u"; Flags: runhidden  

ご協力いただきありがとうございます。

4

2 に答える 2

2

[Files]セクションでは、フラグを使用して、ダウンロードしたファイルがフラグを使用できるexternal標準[Files]セクションを通過できるようにすることgacinstallができます。

[Files]
Source:{tmp}\mylibrary1.dll; DestDir:{app}; StrongAssemblyName: "MyAssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=abcdef123456, ProcessorArchitecture=MSIL" Flags: external; gacinstall;

CurStepChangedその後、[Files]セクションがあなたのためにそれを世話するので、あなたはへのあなたの電話を必要としません。

Pascal Scriptingから、GACAPIを使用できます。

それは公式に文書化されていません、ここにそれをカバーするのに良い仕事をするいくつかの記事があります。

  1. http://support.microsoft.com/default.aspx?scid=kb;en-us;317540
  2. http://www.codeproject.com/KB/system/gacapi.aspx
  3. http://www.codeproject.com/KB/dotnet/undocumentedfusion.aspx

APIを呼び出すために自分で何かを作成することも、このアプリケーションExecを配布して、、またはを呼び出すことで使用することもできますShellExec

InnoSetupが内部で使用するフュージョンDLLをインポートするためのDelphiコードCVSログ)は次のとおりです。

于 2011-06-05T13:29:47.997 に答える
0

.NETコードを呼び出すことができる場合は、以下を使用してアセンブリをGACに登録できます。

System.EnterpriseServices.Internal.Publish.GacInstall(string path)

これはSystem.EnterpriseServicesアセンブリで利用できます。

于 2011-06-06T03:19:58.903 に答える