Могу ли я зарегистрироваться в GAC с помощью сценариев Pascal (InnoSetup)? - PullRequest
3 голосов
/ 04 июня 2011

Я использую InnoSetup для установки приложения, которое я построил. Мой клиент запрашивает, чтобы он загружал последние библиотеки DLL после установки, используя это дополнение InnoSetup:

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

Достаточно просто. У меня все работает так, как я хочу, но без раздела [Files] (потому что он загружает их, а не встраивает в сценарий), я не уверен, как зарегистрировать загруженные DLL в GAC , С разделом [Файлы] я использовал флаг gacinstall .

Теперь, когда я больше не использую [Файлы] , мне было интересно, есть ли способ установить библиотеки DLL в GAC через сценарии Pascal?

Вот соответствующая часть моего сценария установки:

[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 ]

2 голосов
/ 05 июня 2011

В разделе [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] позаботится об этом за вас.

Из сценариев Паскаля вы можете использовать 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 или распространять это приложение и использовать его, вызывая Exec или ShellExec.

Вот Delphi Code ( CVS log ) для импорта библиотеки Fusion DLL, которую InnoSetup использует для внутреннего использования.

0 голосов
/ 06 июня 2011

Если вы можете вызвать код .NET, вы можете зарегистрировать сборки в GAC, используя:

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

, который доступен в сборке System.EnterpriseServices.

...