Inno Setup:如果子文件夹已经存在,请不要安装它

时间:2016-04-26 10:38:54

标签: inno-setup

我正在尝试将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中的文件仍然被替换。

如果已安装应用程序(即执行升级),我希望安装程序避免覆盖数据文件夹。

1 个答案:

答案 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'))