2010-09-02 68 views
1

在安装过程中,用户可以安装一些服务实例(Service1-ServiceN)。这些服务之间的所有差异 - 配置文件的内容(实际上/ Product_Root/run中只有一个可执行文件被称为不同的命令行参数)。位于ProductRoot/ServiceX/conf中的配置文件。Inno Setup:将文件复制到用户定义的多个目标

文件夹结构看起来像:

/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之间变化。

在单一服务的情况下 - 没有问题。在ssPostInstall步使用通配符创建

文件被复制,目录

[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 

更换后在复制的文件执行。

问题。

是否可以使用Inno Setup + ISTool在服务数量的情况下做同样的事情?

E.g.这样的事情:

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

其中我 - 实际上是配置编号。 也就是说是否可以在[File],[Dirs]等部分的安装过程中使用用户从不同目录中复制相同文件的用户收到的信息? 用于在安装过程中以用户设置的不同名称文件数复制单个文件?

或者我只是走错了方向?

回答

1

所以,目前我已经这样做了。欢迎评论。 对于创建和复制所有文件:

#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; 

对于单独的文件,它看起来非常相同。