2010-09-02 79 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; 

對於單獨的文件,它看起來非常相同。

相關問題