需要在Inno Setup中为一个特定文件覆盖确认,无条件地在目录中安装其他文件

问题描述

我有一个包含84个文件的目录(Configurationfiles)。这些文件之一包含用户将要修改的数据(UserData.json。该文件可能存在或可能不存在,但是如果存在,我不想丢失此数据,并试图保持安装用户友好。

我正在尝试修改执行以下所有操作的现有安装脚本:

  1. 如果目录中没有文件,请复制所有文件
  2. 如果有文件覆盖UserData.json以外的所有文件
  3. 如果UserData.json缺少副本认值UserData.json
  4. 如果存在UserData.json,则提示用户覆盖UserData.json,如果覆盖,则覆盖

当前所有文件无论如何都被复制,并且我从未得到覆盖提示。这是我到目前为止所拥有的:

#define ExcludeFiles "UserData.json"

Source: ..\..\PROV\4200701\BIN\*.*; Excludes: {#ExcludeFiles }; DestDir: {app}\BIN; \
  Flags: ignoreversion recursesubdirs skipifsourcedoesntexist;

Source: ..\..\PROV\4200701\BIN\Configurationfiles\UserData.json; \
  DestDir: {app}\BIN\Configurationfiles; 
  Flags: ignoreversion onlyifdoesntexist confirmoverwrite skipifsourcedoesntexist; 

我认为我的标志设置有误。但我不确定。有人看到我要去哪里了吗?

解决方法

您永远无法获得确认,因为onlyifdoesntexist阻止confirmoverwrite生效。

我不认为您对“无论复制所有文件”都是正确的。在测试您的脚本时,我得到:

2020-09-26 16:51:21.625-文件输入-
2020-09-26 16:51:21.626目的地文件名:C:\ Users \ pimpo \ AppData \ Local \ My Program \ BIN \ Configurationfiles \ UserData.json
2020-09-26 16:51:21.626我们文件的时间戳记:2020-09-26 16:49:30.000
2020-09-26 16:51:21.626目标文件存在。
2020-09-26 16:51:21.626 由于“ onlyifdoesntexist”标志而跳过。


如果删除onlyifdoesntexist,则脚本应执行所需的操作。

2020-09-26 16:57:41.066-文件输入-
2020-09-26 16:57:41.067目标文件名:C:\ Users \ pimpo \ AppData \ Local \ My Program \ BIN \ Configurationfiles \ UserData.json
2020-09-26 16:57:41.067我们文件的时间戳记:2020-09-26 16:49:30.000
2020-09-26 16:57:41.067目标文件存在。
2020-09-26 16:57:41.067现有文件的时间戳记:2020-09-26 16:49:30.000
2020-09-26 16:57:41.067消息框(是/否):
C:\ Users \ pimpo \ AppData \ Local \ My Program \ BIN \ Configurationfiles \ UserData.json

文件已存在。

您要安装程序覆盖它吗?
2020-09-26 16:57:43.055用户选择是。
2020-09-26 16:57:43.055安装文件。
2020-09-26 16:57:43.062成功安装了文件。


您可能还希望删除ignoreversion,因为它对.json文件没有影响。这可能会使其他人感到困惑。 skipifsourcedoesntexist也值得怀疑。