当前位置: 首页 > 知识库问答 >
问题:

在所有文件的源路径之间进行选择

单于淇
2023-03-14

在visual studio中编译项目时,我会自动运行一个模糊处理程序。迷惑的。dll文件以相同的文件名保存,但保存在子文件夹中。

文件夹结构

FileA_Secure (subfolder)
    FileA.dll
FileA.dll

问题:我能确保Inno Setup编译<code>FileA吗。dll,而不是FileA。dll,如果“安全”文件A。dll是否存在?

共有1个答案

阎坚成
2023-03-14

您可以使用 Inno 安装程序预处理器有条件地选择源。特别是,使用 #ifexist 指令:

[Files]
#ifexist "MyClass_Secure\MyClass.dll"
Source: "MyClass_Secure\MyClass.dll"; DestDir: "{app}"
#else
Source: "MyClass.dll"; DestDir: "{app}"
#endif

将< code>SaveToFile添加到。iss,来看看最终的剧本是什么样的:

#expr SaveToFile(AddBackslash(SourcePath) + "Preprocessed.iss")

如果需要对多个文件执行此操作,可以定义宏:

#define GetDllSource(Name) \
    FileExists(Name + "_Secure\" + Name + ".dll") ? \
        Name + "_Secure\" + Name + ".dll" : Name + ".dll"

[Files]
Source: {#GetDllSource("MyClass")}; DestDir: "{app}"
Source: {#GetDllSource("MyClass2")}; DestDir: "{app}"

如果要对文件夹及其子文件夹中的所有文件执行此操作,则会变得更加复杂:

#pragma parseroption -p-

; For given DLL, return path to secured DLL, if exists, otherwise return the DLL itself
#define GetDllSource(FileName) \
    Local[0] = ExtractFileName(FileName), \
    Local[1] = Pos(".", Local[0]), \
    Local[2] = Local[1] > 0 ? Copy(Local[0], 1, Local[1] - 1) : Local[0], \
    Local[3] = ExtractFilePath(FileName), \
    Local[4] = Local[3] + "\\" + Local[2] + "_Secure\\" + Local[0], \
    FileExists(Local[4]) ? Local[4] : FileName

; For DLLs, returns [Files] section entry, skip other files
#define FileEntry(Source) \
    (ExtractFileExt(Source) != "dll") ? \
        "" : "Source: " + GetDllSource(Source) + "; DestDir: {app}\n"

; If the directory entry is folder, call ProcessFolder.
; If it is a file, call FileEntry
#define ProcessFile(Source, FindResult, FindHandle) \
    FindResult \
        ? \
            Local[0] = FindGetFileName(FindHandle), \
            Local[1] = Source + "\\" + Local[0], \
            (Local[0] != "." && Local[0] != ".." \
                ? (DirExists(Local[1]) ? ProcessFolder(Local[1]) : FileEntry(Local[1])) \
                : "") + \
            ProcessFile(Source, FindNext(FindHandle), FindHandle) \
        : \
            ""

; If the folder is not _Secure, process its files and subfolders
#define ProcessFolder(Source) \
    (Pos("_Secure", ExtractFileName(Source)) > 0) ? \
        "" : \
        (Local[0] = FindFirst(Source + "\\*", faAnyFile), \
        ProcessFile(Source, Local[0], Local[0]))

#pragma parseroption -p+

[Files]
; Process this folder for DLLs and subfolders (can be changed for a real path)
#emit ProcessFolder(".")
 类似资料:
  • 我想比较同一个工作区文件夹中的两个路径,并获得它们之间的相对路径: 并从secondPath返回firstPath相对路径 谢谢你的帮助。

  • 我不熟悉蚂蚁脚本。 以下是需求描述 在我的工作区中,有各种各样的项目,我必须在RAD和eclipse IDE以及Websphere、tomcat和jboss环境中进行项目工作。。我已经做了特定于项目的设置,以使项目在RAD、websphere、eclipse和tomcat n jboss上工作。。 但是在一些文件中有一些变化,比如classpath n和一些配置文件。 这就给我留下了三个版本的工作

  • 问题内容: 我在带有一些中间件功能的node.js中使用Express框架: 我可以将函数与附加参数一起使用,以仅在特定路径上使用此中间件: 是否可以使用path变量,以便将中间件用于除特定路径(即根路径)以外的所有路径? 我在想这样的事情: 因此,总是调用除根路径以外的其他路径。 问题答案: 我会将checkUser中间件添加到我的除首页之外的所有路径中。 要么 您可以使用下划线扩展它,以在未经

  • 问题内容: 我正在开发一个插件,该插件需要检索Java文件的路径/文件名。 我编写的代码成功检索了xml或清单文件的文件名/路径,但是无法检索包中Java文件的路径。 我使用的代码是:- 问题答案: 感谢GUYZ,我有能力帮助您解决问题 解决方案是- 对象o =((IStructuredSelection)选择).getFirstElement(); den IPath loc =(((IComp

  • 我们希望您能够帮助我们解决以下问题: 给出了一个可能包含圈的有向图。必须找到一组满足以下标准的路径: 在从节点A到节点B的过程中可以通过的所有边必须被集合内的路径覆盖(一条边可以是集合中多条路径的一部分) 解决方案不必是路径数最少的解决方案,路径也不必是最短的。然而,该解决方案应该可以像java一样使用编程语言高效地实现。我们需要解决方案来生成几个测试用例,覆盖节点a和节点B之间的所有边很重要。

  • 问题内容: 我已经看到了一些这样做的例子,但我仍然不明白,也无法实现。 我想做的是在单元格更改(焦点)上,下一个选定的单元格将选择所有文本,以供用户完全更改它。 关于如何做的任何想法? // update //不知何故我设法完成了以下课程,但 实现此 tblLayers.setDefaultEditor(String.class,new Classes.CellEditor()); 不会产生任何结