问题描述
我有一个包含84个文件的目录(Configurationfiles
)。这些文件之一包含用户将要修改的数据(UserData.json
。该文件可能存在或可能不存在,但是如果存在,我不想丢失此数据,并试图保持安装用户友好。
我正在尝试修改执行以下所有操作的现有安装脚本:
- 如果目录中没有文件,请复制所有文件
- 如果有文件覆盖
UserData.json
以外的所有文件 - 如果
UserData.json
缺少副本默认值UserData.json
- 如果存在
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
也值得怀疑。