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

时间:2013-11-14 12:38:04

标签: installer installation windows-installer inno-setup

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

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

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

Source: "*.*"; Excludes: "Setup.iss,generated_images\*"; DestDir: "{app}"; Flags:replacesameversion recursesubdirs

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

由于

3 个答案:

答案 0 :(得分:17)

从您的评论中(因为您没有;实际上显示了您正在谈论的所有代码),我猜您正在做类似的事情:

[Files]
Source: "blah.exe"; DestDir: "{app}"; Flags:replacesameversion
Source: "subfolder\*.*"; DestDir: "{app}"; Flags:replacesameversion

在这种情况下,它正在将subfolder的内容复制到{app}

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

[Files]
Source: "blah.exe"; DestDir: "{app}"; Flags: replacesameversion
Source: "subfolder"; DestDir: "{app}"; Flags: replacesameversion recursesubdirs

或指定显式目标目录:

[Files]
Source: "blah.exe"; DestDir: "{app}"; Flags:replacesameversion
Source: "subfolder\*.*"; DestDir: "{app}\subfolder"; Flags:replacesameversion

答案 1 :(得分:4)

我遇到了类似的问题:

我还有这个文件夹:

  • \ WorkFolder \ MyEmptyFolder \

我想安装系统:

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

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

我正在使用这一行:

Source: .\WorkFolder\MyEmptyFolder\*; DestDir: {app}\MyEmptyFolder; Flags: ignoreversion recursesubdirs createallsubdirs

我希望脚本做的是(每次都不需要重写脚本):

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

我的问题是当它为空时,脚本以错误告知其上没有文件结束。它不明白我想要那个文件夹以及它当时的所有内容。

感谢您的想法,我尝试了解并获得了解决方案,现在是:

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

[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部分,以确保它始终是创建的。

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

答案 2 :(得分:0)

制作安装文件Inno SETUP ....点击新文件夹,点击网址,然后点击编辑并命名要包含在安装文件夹中的子文件夹。