【问题标题】:Inno Setup: Do not install subfolder if it exists alreadyInno Setup:如果子文件夹已经存在,则不要安装它
【发布时间】:2022-01-16 06:15:10
【问题描述】:

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

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

【问题讨论】:

    标签: inno-setup


    【解决方案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'))
    

    【讨论】:

      猜你喜欢
      • 2021-03-17
      • 1970-01-01
      • 2013-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-08
      相关资源
      最近更新 更多