Inno Setup позволяет устанавливать разрешения только в разделах [Files] [Dirs] и [Registry] и вам придется как-то их использовать. Вот 2 решения этой проблемы. Оба хороши, но каждый со своим небольшим недостатком.
Решение 1. Установите разрешение для всего каталога
[Dirs]
Name: {commonappdata}\MyCompany; Permissions:everyone-modify
[INI]
Filename: {commonappdata}\MyCompany\MyProg.ini; Section: "SomeSection"; Key: "SomeKey"; String: "SomeValue"
Это отличное решение, если вы не против изменить права доступа ко всему каталогу. Я возражал и придумал второе решение.
Решение №2. Создайте файл .ini в {tmp} и скопируйте его в раздел [Файлы]:
#define TargetIniDir "{commonappdata}\MyCompany"
#define TargetIniName "MyProg.ini"
....
[Files]
Source: {tmp}\{#TargetIniName}; DestDir: {#TargetIniDir}; Flags:external; Permissions: users-modify;
....
[Code]
procedure PrepareIniFileForCopy(section, key, value, iniFileTemp, iniFileTarget:String);
begin
if FileExists(iniFileTarget) then
FileCopy(iniFileTarget, iniFileTemp, False);
SetIniString(section, key, value, iniFileTemp);
end;
procedure CurStepChanged(CurStep: TSetupStep);
var
iniFile, iniFileTemp:String;
begin
if CurStep=ssInstall then begin
PrepareIniFileForCopy('SomeSection', 'SomeKey', 'SomeValue', ExpandConstant('{tmp}\{#TargetIniName}'), ExpandConstant('{#TargetIniDir}\{#TargetIniName}'));
end;
end;
Это создаст ваш файл .ini в каталоге {tmp} (который будет удален после завершения установки), а затем скопирует его в раздел [Files] в нужный каталог commondata с нужными разрешениями. Обратите внимание на флаг external в разделе [Files], который означает, что файл не упаковывается в программу установки во время компиляции, а берется динамически во время установки. Также обратите внимание, что создание временного файла должно быть выполнено перед установкой (CurStep=ssInstall означает непосредственно перед установкой).
Я думаю, что это решение хорошее, но не очень красивое. Вы разделяете свою операцию на два разных места, которые полагаются на то, что одно выполняется раньше другого.
Оба решения могут добавлять значения в существующие файлы .ini, а не только создавать новые.
person
Michael_S_
schedule
08.08.2014