我遇到了类似的问题:
我有这个文件夹除其他外:
- .\WorkFolder\MyEmptyFolder\
我想在已安装的系统上:
- .\PathToExe\Name.exe
- .\PathToExe\MyEmptyFolder\
如果文件夹不为空,它可以工作,但有时我需要空文件夹。
我正在使用这条线:
Source: .\WorkFolder\MyEmptyFolder\*; DestDir: {app}\MyEmptyFolder; Flags: ignoreversion recursesubdirs createallsubdirs
我想要脚本做的是(无需每次都重新编写脚本):
- 如果文件夹为空,则安装时该文件夹将为空但存在
- 如果文件夹有文件和/或子文件夹,则安装后该文件夹将存在并具有该内容
我的问题是当它为空时,脚本以错误结束,告诉它上面没有文件。它不明白我想要那个文件夹以及当时它上面的所有内容。
感谢您的想法,我尝试了它们并得到了解决方案,这里是:
首先确保将创建文件夹(如果没有包含 Files 部分的文件,则不会创建它):
[Dirs]
Name: {app}\; Permissions: users-modify
Name: {group}\; Permissions: users-modify
Name: {app}\MyEmptyFolder\; Permissions: users-modify
接下来编辑文件部分的行以包括“skipifsourcedoesntexist”:
Source: .\WorkFolder\MyEmptyFolder\*; DestDir: {app}\MyEmptyFolder; Flags: ignoreversion recursesubdirs createallsubdirs skipifsourcedoesntexist
它做我想做的事:包括这样的文件夹及其上的所有内容,无论文件夹是否为空,如果它为空,脚本不会以错误结束。
这是如何工作的?
简单的技巧:如果文件夹为空,文件部分行将失败并且脚本将以错误结束,但使用 skipifsourcedoesntexist 可以避免这种情况,但这会使此类文件夹不存在,这就是我在 Dirs 部分添加此类文件夹的原因,以确保它始终被创建。
希望这有助于其他人不要生气!