如何使用Inno Setup Compiler在exe文件中包含一个文件夹

fs_*_*gre 8 installation installer windows-installer inno-setup

我目前正在使用Inno Setup Compiler为Windows创建一个安装程序,除非我尝试在exe文件中包含一个文件夹,否则一切正常.换句话说,我想要的是能够包含一个包含两个文件的文件夹,我希望这个文件夹在安装程序时出现在.exe文件所在的位置(C:\ Program Files x86\appFolder).

Inno有一个添加文件夹的选项,但出于某种原因,当我选择包含我想要的两个文件的文件夹时,它编译得很好但是当我实际安装程序时它实际上添加了两个文件而不是文件夹.

我在网上发现了以下代码行,我使用它但实际上包含了一些我不想要的文件夹.我对这行代码的问题是我不完全理解它,我不知道文件夹路径应该在哪里?什么是Exlude:"Setup.iss,generated_images \"

Source: "*.*"; Excludes: "Setup.iss,generated_images\*"; DestDir: "{app}"; Flags:replacesameversion recursesubdirs
Run Code Online (Sandbox Code Playgroud)

有人可以解释这行代码吗?

谢谢

Dea*_*nna 17

根据你的评论(因为你没有;实际上显示了你正在谈论的所有代码),我猜你做的是:

[Files]
Source: "blah.exe"; DestDir: "{app}"; Flags:replacesameversion
Source: "subfolder\*.*"; DestDir: "{app}"; Flags:replacesameversion
Run Code Online (Sandbox Code Playgroud)

在这种情况下,复制的内容subfolder{app}.

如果要复制它并保留子目录,请指定目录本身:

[Files]
Source: "blah.exe"; DestDir: "{app}"; Flags: replacesameversion
Source: "subfolder"; DestDir: "{app}"; Flags: replacesameversion recursesubdirs
Run Code Online (Sandbox Code Playgroud)

或指定显式目标目录:

[Files]
Source: "blah.exe"; DestDir: "{app}"; Flags:replacesameversion
Source: "subfolder\*.*"; DestDir: "{app}\subfolder"; Flags:replacesameversion
Run Code Online (Sandbox Code Playgroud)


ano*_*ous 5

我遇到了类似的问题:

我有这个文件夹,其中包括:

  • .\WorkFolder\MyEmptyFolder\

我想在已安装的系统上:

  • .\PathToExe\Name.exe
  • .\PathToExe\MyEmptyFolder\

如果文件夹不为空,它可以工作,但有时我需要空文件夹。

我正在使用这一行:

Source: .\WorkFolder\MyEmptyFolder\*; DestDir: {app}\MyEmptyFolder; Flags: ignoreversion recursesubdirs createallsubdirs
Run Code Online (Sandbox Code Playgroud)

我想要脚本做的是(无需每次都重新编写脚本):

  • 如果文件夹为空,则安装时文件夹将为空但存在
  • 如果文件夹有文件和/或子文件夹,则安装后文件夹将存在并包含该内容

我的问题是当它为空时,脚本以一个错误结束,告诉它上面没有文件。它不明白我想要那个文件夹以及当时它可能是什么。

感谢您的想法,我尝试了它们并得到了解决方案,这里是:

首先确保将创建文件夹(如果没有包含 Files 部分的文件,则不会创建它):

[Dirs]
Name: {app}\; Permissions: users-modify
Name: {group}\; Permissions: users-modify
Name: {app}\MyEmptyFolder\; Permissions: users-modify
Run Code Online (Sandbox Code Playgroud)

接下来编辑文件部分的行以包含“skipifsourcedoesntexist”:

Source: .\WorkFolder\MyEmptyFolder\*; DestDir: {app}\MyEmptyFolder; Flags: ignoreversion recursesubdirs createallsubdirs skipifsourcedoesntexist
Run Code Online (Sandbox Code Playgroud)

它完成了我想要的:包括这样的文件夹及其上的所有内容,无论文件夹是否为空,如果为空,脚本都不会以错误结束。

这是如何工作的?

简单的技巧:如果文件夹为空,文件部分行将失败并且脚本将以错误结束,但是使用 skipifsourcedoesntexist 可以避免这种情况,但这会使此类文件夹不存在,这就是我在 Dirs 部分添加此类文件夹的原因,以确保它始终被创建。

希望这有助于其他人不要生气!