Inno Setup: копировать файл в несколько мест назначения, определенных пользователем - PullRequest
1 голос
/ 02 сентября 2010

В процессе установки пользователь имеет возможность установить количество некоторых экземпляров сервиса (Service1-ServiceN). Все различия между этими службами - содержимое файлов конфигурации (на самом деле в / Product_Root / run есть только один исполняемый файл, который вызывается с разными параметрами командной строки). Файлы конфигурации, расположенные в ProductRoot / ServiceX / conf.

Структура папок выглядит следующим образом:

/Product_Root
----/bin
----/doc
----/Service1
---------/conf
----/Service2
---------/conf
...
----/ServiceN
---------/conf

В ProductRoot / ServiceX / conf находится, например, файл service.properties со следующим содержимым:

#...
ServiceRoot = <%ROOT_DIRECTORY%>
ListenPort = <%PORT%>
#...

Также в / Product_Root / bin должны присутствовать скрипты для каждого запуска сервиса: Например:

/Product_Root/bin/Service1.run.cmd
/Product_Root/bin/Service2.run.cmd
...
/Product_Root/bin/ServiceN.run.cmd
...

Структура файла сценария:

service.exe ../<%SERVICE_NAME%>/conf/service.properties

Все значения (например, <% SERVICE_NAME%>, <% PORT%> и т. Д.) Устанавливаются пользователем в процессе установки для каждой службы. Количество услуг также устанавливается пользователем и может варьироваться от 1 (по умолчанию) до 20-30.

В случае разовой услуги - нет проблем.

Копируемые файлы, каталоги, созданные с помощью

[Files]
Source: {#FilesPath}\bin\*.*; DestDir: {app}\{#FileLocationPrefix}\bin; Flags: ignoreversion restartreplace
Source: {#АilesPath}\conf\*.*; DestDir: {app}\{#FileLocationPrefix}\{code:GetServiceName}\conf; Flags: ignoreversion recursesubdirs createallsubdirs restartreplace; 

[Dirs]
Name: {app}\{#FileLocationPrefix}{code:GetServiceName}\conf

После выполнения шага ssPostInstall подстановочные знаки заменяются в скопированных файлах.

Вопрос.

возможно ли использовать Inno Setup + ISTool для того же самого в случае количества служб?

например. что-то вроде этого:

[Files]
#for (i = 0; i < ServiceCount(); ++i) 
Source: {#АilesPath}\conf\*.*; DestDir: {app}\{#FileLocationPrefix}\{code:GetServiceName| i}\conf; Flags: ignoreversion recursesubdirs createallsubdirs

где i - фактически номер конфигурации. То есть Можно ли использовать информацию, полученную от пользователя в процессе установки в разделах [File], [Dirs] и т. д., для многократного копирования одних и тех же файлов в разные каталоги? Для копирования одного файла в число файлов с разными именами, заданными пользователем в процессе установки?

Или я просто иду в неправильном направлении?

1 Ответ

1 голос
/ 02 сентября 2010

Итак, в настоящее время я сделал это таким образом.Комментарии приветствуются.Для создания и копирования всех файлов:

#define MaxFEInstances 20
...
#sub CreateConf
Source: {#FilesPath}\conf\*.*; DestDir: {app}\{#FileLocationPrefix}{code:GetServiceName|{#counter}}\conf; Flags: ignoreversion recursesubdirs createallsubdirs restartreplace; Check: InstanceSetupRequired({#counter}); Components: main
#endsub
#for {counter = 0; counter < MaxInstances; ++counter} CreateConf
enter code here
...
function InstanceSetupRequired(InstanceNum: Integer): Boolean;
begin
  Result := InstanceNum < Instances;
end;

Для отдельных файлов это выглядит примерно одинаково.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...