我正在尝试将C:\App\Web\*
中的所有内容打包到安装程序中。
如果数据库子文件夹mysql\data
存在,那么我不想要替换这些文件。
这是我的Inno安装脚本:
[Files]
Source: "C:\App\Web\xampp-control.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\App\Web\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "C:\App\Web\*"; DestDir: "{app}"; Excludes: "C:\App\Web\mysql\data\*"; Flags: ignoreversion recursesubdirs createallsubdirs; Check: DirExists(ExpandConstant('{app}\mysql\data\*'))
mysql\data
中的文件仍然被替换。
如果已安装应用程序(即执行升级),我希望安装程序避免覆盖数据文件夹。
答案 0 :(得分:1)
您的脚本中有两个问题:
C:\App\Web\*
无条件地复制所有内容。第二个条目不能改变它。DirExists
不支持文件掩码,您可以使用它来仅测试目录的存在。删除尾随\*
这是正确的方法:
[Files]
...
; Always install everything except the mysql\data
Source: "C:\App\Web\*"; DestDir: "{app}"; Excludes: "C:\App\Web\mysql\data\*"; \
Flags: ignoreversion recursesubdirs createallsubdirs
; Install the mysql\data, only if it does not exist yet
Source: "C:\App\Web\mysql\data\*"; DestDir: "{app}\mysql\data"; \
Flags: ignoreversion recursesubdirs createallsubdirs; \
Check: not DirExists(ExpandConstant('{app}\mysql\data'))