Могу ли я зарегистрироваться в GAC с помощью Pascal scripting (InnoSetup)?
Я использую InnoSetup для установки приложения, которое я построил. Мой клиент просит, чтобы он загрузил последние библиотеки DLL при установке с помощью этого дополнения InnoSetup:
Http://www.sherlocksoftware.org/page.php?id=50
Достаточно просто. Я получил его работу, как я хочу, но без раздела [Files] (потому что он загружает их, а не строит их в сценарий), я не уверен, как зарегистрировать загруженные DLL в GAC. С разделом [файлы] в, я использовал флаг gacinstall.
Теперь, когда я больше не использую [Files], мне было интересно, есть ли способ установить библиотеки 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 ответа:
Раздел
[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 можно использовать API GAC.
Это официально не задокументировано, вот некоторые статьи, которые делают хорошую работу по освещению оно.
- http://support.microsoft.com/default.aspx?scid=kb; en-us;317540
- http://www.codeproject.com/KB/system/gacapi.aspx
- http://www.codeproject.com/KB/dotnet/undocumentedfusion.aspx
Вы можете построить что-то самостоятельно, чтобы вызвать API, или вы можете распространить это приложение и использовать его, вызывая
Exec
, илиShellExec
.Вот код Delphi (CVS log ) к импорт библиотеки DLL fusion, которую InnoSetup использует внутренне.