使用 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 安装隐藏文件 的相关文章

  • Inno Setup 仅卸载部分组件

    我有一个通用的应用程序 例如媒体播放器 用于安装在同一文件夹中的每个不同的零售产品 即 C 程序文件 myapp 并且不同的内容 例如电影 都安装在同一个文件夹中 C 程序文件 myapp 电影 对于每个单独的安装 单独的零售产品 我只是创
  • 如何将带有值的命令行参数传递给 Inno Setup 编译器,以便我可以在代码中使用它们?

    我有两种可能的构建选项 由于我不希望我的客户使用某些参数启动安装程序 因此我最好将它们传递给编译器并在我的代码中完成所有工作 假设我有变量UNION它可能有两个值 0 and 1 我必须在代码中分析该变量的值 并根据结果包含或不包含某些文件
  • 安装到 {sys} 的文件/DLL 未出现在 C:\Windows\system32 中

    我不知道为什么 但是当我尝试将文件从安装目录复制到system32 尽管在 Inno Setup 中显示安装成功 但它未能执行此操作 这是我的代码 Files specifies what files will be included in
  • Inno Setup 选择一个目录来安装预定义集中的文件

    在这种情况下 我需要将文件安装到特定目录 但在不同的计算机上它可能位于不同的文件夹中 所以我需要检查哪个是正确的 例如 我有一个文件 需要将其安装在A文件夹或B文件夹或C文件夹 取决于计算机有A or B or C 所以我需要先检查一下计算
  • 如何从PrepareToInstall事件函数设置StatusMsg

    我的应用程序需要安装 NET Framework 因此我运行 NET 安装准备安装事件函数 当安装运行时 我想在向导上显示一些简单的消息 I found 如何在 Inno 安装脚本的 Code 部分设置状态消息 https stackove
  • 如何使用 Inno Setup 在安装过程中检查端口是否可用?

    我正在尝试创建一个安装文件 以便在安装过程中它将检查端口 例如 9000 并让用户知道端口状态 我是 Inno Setup 的新手 想知道这是否可行 以及如何检查这一点 谢谢 您可以使用我的功能来检查端口是否可用 see function
  • Inno Setup:如何在选中的复选框上显示(隐藏/取消隐藏)密码

    我在输入查询页面中添加了一个复选框 以便在选中时使用它向我显示未发现的密码 但我不知道该怎么做 我已经创建了以下过程 但这个过程并没有改变我添加输入时的 true false 值 此过程添加了我完成这项工作的新文本框 请你帮助我好吗 pro
  • Inno Setup:如何根据代码更改语言文件

    我使用自己的语言文件 isl 而不是使用 Inno Setup 的默认语言文件 它允许我自定义一些消息 但现在 我想要每种语言文件有两个版本 一个用于首次安装 一个用于更新 但是 是否可以从代码中选择一个文件 如果是 该怎么做 也许有一些比
  • 在 Inno Setup 中实现脚本常量时出现“预期标识符”或“原型无效”

    因此 鉴于此功能 我在GetRoot ROOTPage Values 0 线 我希望它告诉我ROOTPage没有定义 const DefaultRoot C IAmGRoot Var ROOTPage TInputQueryWizardPa
  • Inno Setup:仅在不是 VERYSILENT 的情况下安装

    仅当安装程序未以非常安静的方式运行时 我才想安装并注册某个文件 我不知道我怎样才能做到这一点 我当前的线路是 Source M sqlite36 engine dll DestDir sys Flags uninsneveruninstal
  • Inno Setup 代码部分创建隐藏文件

    我正在处理 Inno Setup 项目 该项目正在使用SaveStringToFile函数在 Code 部分 我想将此文件设置为隐藏系统文件 但我无法找到有关如何实现此操作的信息 有任何想法吗 Inno Setup Pascal Scrip
  • Inc 函数 Inno Setup

    这可能非常简单 但是当我尝试编译包含以下内容的程序时 Inc Count 在 Inno Setup 中我不断得到 未知标识符 Inc 我相信这就是在 Pascal 中递增整数的方式 并且对如何继续这里感到困惑 我正在使用 Inno Setu
  • Inno Setup 从 .NET Framework 4.5(或更高版本)安装程序获取进度以更新进度栏位置

    我目前正在安装 NET Framework 4 6 2 作为先决条件PrepareToInstall事件函数 以便我可以获得退出代码 设置NeedsReboot状态 或者如果安装失败则中止 我的代码如下 一切正常 var PrepareTo
  • 在 Inno Setup 中使用 {AppVersion} 作为函数的参数

    所以我有一个正在更新一些 XML 的函数 我想传递 AppVersion 已设置在 Setup 脚本的一部分作为该函数的常量 我努力了 MyFunction ExpandConstants AppVersion 但这给了我一个错误 如何正确
  • Inno Setup:使用缩进保存 XML 文档

    我正在尝试在 Inno Setup 中向 XML 文件添加一个新节点 节点添加正确 但下一个标记之前的换行符被删除或未添加换行符 这是我的添加节点代码 NewNode XMLDoc createElement Test XMLDoc set
  • 在启动设置而不是结束时提取文件

    我正在使用最新版本的 inno 它在安装过程中执行以下操作 执行依赖性检查以查看安装的内容 安装尚未安装的依赖项 net sql server directx 等 从 Files 部分安装应用程序和文件 wpReady 检查 SQL Ser
  • 使用 InnoSetup 创建 NLog 日志文件文件夹

    我遇到一个问题 我需要我的用户能够在没有管理员权限的情况下运行我的应用程序 但同时 我需要 NLog 能够创建它的日志文件 它需要管理员权限才能在应用程序安装在同一文件夹中 我正在尝试在应用程序目录下创建一个目录 名为Logs 并给ever
  • Inno Setup 编译失败,并显示“未指定必需参数“Root”。”即使有一个

    我是 Inno Setup 的初学者 我想创建一个安装程序 它复制两个 exe 文件并向 PATH 环境变量附加一个值 特别是我必须复制两个可执行文件 称为 pandoc exe 和 pandoc citeproc exe 这两个文件是我之
  • 如何在“PrepareToInstall”期间显示进度?

    我正在开发的安装程序的大部分工作是在PrepareToInstall功能 因为我需要做的一切都可能失败 因此这是处理这些事情的适当位置 以防它们失败 通过在函数结果中传递错误消息 可以自动报告任何失败 安装程序实际复制的只有 3 个小文件
  • Inno Setup 中的文件关联

    我正在使用 Inno Setup 并尝试关联位于Program Files x86 在 Windows 7 中 我有以下内容 define MyAppName MyView define MyAppExeName MyView exe Se

随机推荐

  • 如何在 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