我可以使用Pascal脚本(InnoSetup)注册到GAC吗?

时间:2011-06-04 18:00:42

标签: gac inno-setup pascal global-assembly-cache pascalscript

我正在使用InnoSetup来安装我构建的应用程序。我的客户端要求它在安装时使用此InnoSetup插件下载最新的DLL:

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

足够简单。我得到它的工作方式,但没有 [Files] 部分(因为它下载它们而不是将它们构建到脚本中),我不知道如何将下载的DLL注册到GAC。使用 [Files] 部分,我使用了标志 gacinstall

现在我不再使用 [Files] ,我想知道是否有办法通过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  

感谢您的帮助。

2 个答案:

答案 0 :(得分: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中,您可以使用GAC API。

它没有正式记录,这里有一些文章可以很好地覆盖它。

  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
  4. 您可以自行构建一些内容来调用API,或者您可以分发this application并通过调用ExecShellExec来使用它。

    以下是导入InnoSetup内部使用的融合DLL的Delphi CodeCVS log)。

答案 1 :(得分:0)

如果您可以调用.NET代码,则可以使用以下命令将程序集注册到GAC:

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

可在System.EnterpriseServices程序集中使用。