使用 Inno Setup 安装隐藏文件

2024-01-06

我需要使用 Inno Setup 创建的安装程序在最终用户计算机上安装一组跨越多个文件夹的隐藏文件。我已经提到过在 Inno Setup 中复制隐藏文件 https://stackoverflow.com/questions/34050206/copying-hidden-files-in-inno-setup,但似乎指定的 DirectoryCopy 函数将文件从同一台计算机复制到同一台计算机。

我需要从 setup.exe 文件中提取隐藏文件,然后将其安装到最终用户计算机上,该计算机与创建安装程序的计算机不同。


When [Files]部分Source参数是通配符,隐藏文件将被忽略。看BuildFileList in Compile.pas https://github.com/jrsoftware/issrc/blob/is-6_0_3-2/Projects/Compile.pas#L6054-L6056.

一个简单的解决方案是从源文件中删除隐藏属性。


如果您无法删除隐藏属性(例如,如果您需要在安装时保留它),您可以生成[Files]节条目使用预处理器 https://jrsoftware.org/ispphelp/,避免使用通配符。

#pragma parseroption -p-

; If the file is found by calling FindFirst without faHidden, it's not hidden
#define FileParams(FileName) \
    Local[0] = FindFirst(FileName, 0), \
    (!Local[0] ? "; Attribs: hidden" : "")

#define FileEntry(Source, DestDir) \
    "Source: \"" + Source + "\"; DestDir: \"" + DestDir + "\"" + \
    FileParams(Source) + "\n"

#define ProcessFile(Source, DestDir, FindResult, FindHandle) \
    FindResult \
        ? \
            Local[0] = FindGetFileName(FindHandle), \
            Local[1] = Source + "\\" + Local[0], \
            (Local[0] != "." && Local[0] != ".." \
                ? (DirExists(Local[1]) \
                      ? ProcessFolder(Local[1], DestDir + "\\" + Local[0]) \
                      : FileEntry(Local[1], DestDir)) \
                : "") + \
            ProcessFile(Source, DestDir, FindNext(FindHandle), FindHandle) \
        : \
            ""

#define ProcessFolder(Source, DestDir) \
    Local[0] = FindFirst(Source + "\\*", faAnyFile), \
    ProcessFile(Source, DestDir, Local[0], Local[0])

#pragma parseroption -p+

Use the ProcessFolder宏如:

[Files]

#emit ProcessFolder("C:\source", "{app}")

它将生成一个如下脚本:

[Files]
Source: "C:\source\file.txt"; DestDir: "{app}"
Source: "C:\source\subfolder\file.jpg"; DestDir: "{app}\subfolder"
Source: "C:\source\subfolder\hidden.txt"; DestDir: "{app}\subfolder"; Attribs: hidden

(See Inno Setup:如何查看 Inno Setup 预处理器的输出(翻译)? https://stackoverflow.com/q/3328375/850848)


恩特布问题,你指的是 https://stackoverflow.com/q/34050206/850848,是关于复制外部文件,因此它与您的问题无关。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Inno Setup 安装隐藏文件 的相关文章

  • 如何在Windows XP中安装延迟自动启动类型的服务

    我的安装程序在 Inno Setup 中使用以下命令创建服务 Filename sys sc exe Check IsAdminLoggedOn Parameters create Example start delayed auto bi
  • Inno Setup 自定义页面

    我想在选择安装位置的页面之后创建一个自定义向导页面 我已经了解了如何创建自定义页面并将其添加到向导中InitializeWizard程序 我的问题是 当我创建自定义页面时 安装位置选择的默认页面不再出现 我必须使用哪些选项来保留默认页面 安
  • 从一种安装切换到另一种安装时,Inno setup 会隐藏安装项目

    我应该需要你的帮助 我想知道 Inno 是否有可能为 2 个产品设置 2 个不同的安装掩码 通过从下拉列表中选择 我们将这两种不同的安装称为 SETUP 和 PROGRAM 安装 SETUP 时 我们应该可以选中 取消选中以下复选框 将安装
  • 在使用 Inno Setup 安装期间报告已安装的 .NET Framework 版本

    我正在尝试使用 Inno Setup 来准备创建安装程序 我的第一次尝试是向用户报告当前安装了哪个 NET Framework 我想出了以下脚本 它安装了一个令牌 exe 但它没有显示我想要显示已安装的框架版本的消息框 Setup AppN
  • 为每个文件调用 Inno Setup AfterInstall 函数

    我想在安装文件夹后调用一个函数 但是InstallEnv函数似乎被调用了几次 也许每个文件都是文件夹 待确认 有没有办法在安装所有这些文件后只调用一次 我无法使用Run部分 因为我想用返回代码进行错误捕获 Source InputFiles
  • 通过代码使卸载注册表项成为有条件的

    如何禁用 Inno SetupCreateUninstallRegKey http www jrsoftware org ishelp index php topic setup createuninstallregkey通过代码 My 安
  • 是否可以使用 INNO 脚本移动现有目录/文件?

    我们最近对一个使用 INNO 脚本安装的应用程序进行了重大重组 不幸的是 该应用程序需要某些文件在不同版本之间保持不变 更不幸的是 这些文件的位置在这次重组期间发生了变化 最不幸的是 现在由我来制作一个 INNO 脚本片段 它将查看这些文件
  • 我的安装程序如何有选择地删除一些最初并非创建的文件?

    我将所有程序的设置存储在 appdata 目录 appdata MyProgram 中 当出现问题而用户必须重新安装时 我想询问是否删除该目录中的数据 我正在使用 Inno Setup 并添加了一个自定义页面来提示用户 if DirExis
  • 准备卸载,就像 Inno Setup 中的准备安装页面一样

    我需要检查多个 exe 文件是否正在运行 通过安装程序安装 然后提示用户关闭它们 如果它们正在运行 如果没有则取消卸载过程 有没有办法在安装中为卸载程序提供类似 准备 页面之类的内容 或者我该如何实施这样的检查 甚至一个消息框也将是完美的
  • 如何使用 Inno Setup 检查互联网连接

    我正在学习 Inno Setup 来制作一个简单的安装程序 在安装过程中我需要从网站下载文件 因此检查是否有互联网连接很重要 在安装过程中如何检查或采取一些警报以连接互联网 Thanks 最好的检查是尝试实际下载该文件 互联网 几乎不是一个
  • 如何使用 Inno Setup 连接到 MS SQL Server?

    我想在安装过程中连接到 MS SQL Server 2008 有一个类似的问题 https stackoverflow com q 2171199 960757 它提供了一个解决方案 使用isql exe工具 与 SQL Server 20
  • Inno Setup:如何观察变量值或写入调试输出?

    在 Inno Setup 中调试时如何观察变量的值 如何打印一些内容来调试输出 Thanks 目前没有调试监视窗口 但当调试器在断点处停止时 您只需将鼠标悬停在要检查的变量上即可 要将某些内容打印到调试输出 请使用Log http jrso
  • 在 Inno Setup 中获取 MAC 地址

    我尝试使用下面的代码来获取 Inno Setup 中的 mac 地址 但出现错误 内部错误 ExtractTemporaryFile 找不到文件 ISID dll 我已经复制了ISID dll在应用程序文件夹中仍然出现上述错误 如果我遗漏了
  • 如何使用 Inno Setup 在安装过程中检查端口是否可用?

    我正在尝试创建一个安装文件 以便在安装过程中它将检查端口 例如 9000 并让用户知道端口状态 我是 Inno Setup 的新手 想知道这是否可行 以及如何检查这一点 谢谢 您可以使用我的功能来检查端口是否可用 see function
  • 在 Inno Setup 中实现脚本常量时出现“预期标识符”或“原型无效”

    因此 鉴于此功能 我在GetRoot ROOTPage Values 0 线 我希望它告诉我ROOTPage没有定义 const DefaultRoot C IAmGRoot Var ROOTPage TInputQueryWizardPa
  • Inno Setup:允许用户只选择可以安装软件的驱动器?

    我可以允许用户只选择要安装软件的驱动器吗 例如 他们可以选择C or D drive C Software D Software 但用户不能指定任何其他内容 就像他们不能选择安装下面的软件一样Downloads or MyDocumnets
  • Inno Setup 在 Windows Vista/7 及更高版本上安装到 AppData\Roaming,但在 Windows XP 上安装到应用程序数据

    我为 inDesign 制作了几个脚本 现在我想将它们全部分发到一个安装文件中 由于 inDesign 脚本驻留在 XP 和 Vista 或更高版本 上的不同位置 因此我遇到了一些问题 我编译的设置在 Windows XP 下运行良好 但不
  • 欢迎页面未显示,SelectDir 页面首先显示

    我正在尝试使用 Inno Setup 来制作安装程序 我想先显示欢迎页面 然后显示 SelectDir This is CurPageChanged示例代码 procedure CurPageChanged CurPageID intege
  • Inc 函数 Inno Setup

    这可能非常简单 但是当我尝试编译包含以下内容的程序时 Inc Count 在 Inno Setup 中我不断得到 未知标识符 Inc 我相信这就是在 Pascal 中递增整数的方式 并且对如何继续这里感到困惑 我正在使用 Inno Setu
  • Inno Setup:验证是否已安装 .NET 4.0

    我有一个需要 NET 4 0 才能运行的组件 我的 Inno Setup 安装程序如何验证它是否已安装 如果没有 则提示用户安装它 The InitializeSetup运行 Inno Setup 可执行文件时调用该函数 为自定义脚本插入此

随机推荐

  • 如何在 Angular 2 中获得全彩色的垫卡标题背景?

    我在 Angular 2 中制作了一个联系表 我会制作一个彩色顶栏
  • 找出构建 Binary 的 Go 版本?

    有没有办法知道二进制文件是用哪个版本构建的 我的工作站上有多个 go 实例 因此我想验证是否使用了正确的实例 以下命令应该可以做到这一点 strings binary path grep go1 go1 5 3
  • 并行性如何使用matlab求解ODE参数扫描

    只是想问一些有关我的代码的问题 从互联网上获取了此代码 这可能与 mathworks 网站中的示例相同 我在 MATLAB 中模拟此代码并得到了结果 我可以看到解决该问题所需的时间更少使用并行计算 具有 2 个工作线程的 matlabpoo
  • 在模板中同时迭代两个字典

    我试图在模板中同时打印两个字典的值 例如 td key td td value from dict1 td td value from dict2 td 两个字典包含相同的键但不同的值 有什么办法可以实现这一点吗 您可以使用自定义过滤器来完
  • 谷歌地图图像?

    有什么办法可以捕捉谷歌地图的图像吗 我无法使用静态地图 因为我在地图中有自己的折线 并且我希望它们出现在 屏幕截图 中 基本上 我希望用户导航地图 添加一些折线 当他单击 保存 时 我将保存线条 坐标 缩放 但我还希望有一个图像在列表中以缩
  • 删除 Service Fabric 应用程序后进程仍继续运行

    当我删除服务结构应用程序时 我已经看到了这一点 应用程序内服务的旧进程仍然继续运行 应用程序中包含的服务有以下类型 Actors 无状态服务 ASP NET 核心 当我重新部署应用程序时 我注意到了这个问题 并且 ASP NET Core
  • 如何使用 VSTS 2008 Database Edition GDR 版本编辑数据库对象的默认模板

    我正在尝试使用 Visual Studio Team System 2008 数据库版 GDR 版本 来完成我正在开发的一个新项目 并且遇到了一个有点烦人的问题 我希望有人知道如何解决该问题 简而言之 我想更改用于生成数据库对象 特别是存储
  • 使用 FireDac (Delphi) 在 Firebird 中创建数据库

    我最近从 AnyDac 更改为 FireDac 8 0 5 3365 我们正在运行 Delphi 2006 当我使用该组件的 AnyDac 版本时 我可以通过执行以下操作来创建一个新数据库 设置我的连接 fConnection LoginP
  • 在 C# 应用程序中管理多个 Windows 窗体

    关于管理具有多种形式的应用程序的好方法的任何想法 建议 模式 第一个页面是登录 加载 主表单 用户可以从那里启动许多其他 子表单 可能会随着时间的推移而增长 用户应该能够随时取消整个应用程序 我知道我现在做事的方式并不总是优雅的 Cody
  • 使用 git/github 对 R 包进行版本控制?

    我在确定更新 github 上 R 包版本号的工作流程时遇到问题 以避免错误命名 中间 版本 这就是我现在所做的 提交并推送 例如版本 1 0 0 并将发行版设置为 1 0 0 提交并推送一些错误修复等 而不更改描述文件 最终决定我应该将版
  • git pull 实际上并没有从远程恢复我丢失的文件

    我一直在一个分支机构工作 我提交并将其推送到远程存储库 现在该分支上的一些文件丢失了 希望它们在远程分支上仍然可用 所以我尝试这样做git pull git pull origin feature my branch 然而 git表示所有内
  • Objective C - 隐藏 iVar

    这是我的问题 假设我有一个名为 WebServiceBase h 的类 我需要在该类中添加一个名为 NSString requestData 的 iVar 但我不需要将该 iVar 添加到头文件中并使其对外部人员可见 如果我将其作为类库分发
  • SQL在分割字符串后将数据插入到其他表中

    我有一张桌子WCA ID TYPE 1 1 3 5 2 1 5 现在我想将数据移动到新表WCA TYPE ID WCA ID TYPE 1 1 1 2 1 3 3 1 5 4 2 1 5 2 5 这里的ID是自动增加的 如何在 MS SQL
  • 数据更改时 LiveData 不更新

    我正在使用 LiveData 从服务器获取数据并观察它 我的onChanged 方法只在第一次被调用 当服务器中的数据更新时不会被调用 用户片段 UserViewModel userViewModel ViewModelProviders
  • 如何向 QMainWindow 添加背景图像?

    大家好 我是 QT 创建者的新手 我尝试了很多方法来设置 Q 主窗口的背景图像 我添加了一个带有图像的资源文件夹 我尝试在 UI 中使用 setstylesheet 添加并尝试对其进行编码 当我使用用户界面时 我可以看到图像 但当我运行它时
  • 具有多个命名空间的 VBA SelectSingleNode xpath

    我遇到了与其他人类似的问题 尝试通过具有两个命名空间的 XML 使用 xPath 进行搜索 但仍在查看其他主题 但它似乎不起作用 XML
  • 更新一类中的多个项目,而不仅仅是一个

    在此代码的更新部分中 只有第一个制作的蝙蝠受到 Bat 类中 update 的影响 主循环之外 START BAT COUNT 30 BAT IMAGE PATH os path join Sprites Bat enemy Bat 1 p
  • Kubernetes - 如果容器无法重新触发初始化容器,则强制 pod 重新启动

    我在我的 pod 中发现 如果容器因存活探针失败而失败或被终止 容器会重新启动 但 pod 不会 这意味着initContainers在容器崩溃的情况下不会再次运行 就我而言 我确实需要运行其中之一initContainers每次主容器失败
  • 我应该用什么来替换 hibernate 已弃用的 @TypeDef 和 @Type 注释?

    我刚刚将 Hibernate 使用的版本升级到 5 6 1 现在似乎弃用了一些与类型相关的注释 TypeDef name json typeClass JsonBinaryType class Type type json 我没有找到任何关
  • 使用 Inno Setup 安装隐藏文件

    我需要使用 Inno Setup 创建的安装程序在最终用户计算机上安装一组跨越多个文件夹的隐藏文件 我已经提到过在 Inno Setup 中复制隐藏文件 https stackoverflow com questions 34050206