2011-06-04 40 views
3

我使用InnoSetup來安裝我建立的應用程序。我的客戶端請求,它下載最新的DLL。一旦使用該插件InnoSetup安裝:我可以使用Pascal腳本(InnoSetup)向GAC註冊嗎?

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

[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腳本中,您可以使用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

你可以建立自己的東西來調用API,或者你可以分發this application,並通過調用Exec,或者ShellExec使用它。

這裏是Delphi CodeCVS log)導入InnoSetup內部使用的融合DLL。

+0

更新爲我意識到可以使用'[Files]'部分。 – 2011-06-06 03:13:20

0

如果你可以調用.NET代碼,您可以使用註冊程序集到GAC:

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

這是在System.EnterpriseServices組裝功能。

+0

InnoSetup產生本機代碼安裝。所以你可以做到這一點,但必須將這個調用包裝到一個可以被稱爲.NET的接口中 – 2011-06-06 16:11:04

相關問題