【问题标题】:How to get the name of the exe in the Innosetup script from the full path of the exe is given?如何从给出的 exe 的完整路径中获取 Innosetup 脚本中的 exe 名称?
【发布时间】:2012-01-15 17:49:54
【问题描述】:

例如,如果提供的 exe 的完整文件路径为C:\Projects\Executable\Serial Data Streaming Recorder.exe,我需要提取 exe 的名称。那是Serial Data Streaming Recorder,我想动态地将这个值分配给exe的完整文件路径中的一个变量。

手动完成,如下例所示:

#define ExePath "C:\Projects\Executable\Serial Data Streaming Recorder.exe"
#define AppName "Serial Data Streaming Recorder" 

我想将值Serial Data Streaming Recorder从exe的完整文件路径动态分配给变量AppName

我在许多文件的 inno 脚本中的许多地方都使用了这个名称,所以我不想通过将此值分配给变量来手动执行此操作。

【问题讨论】:

    标签: installation inno-setup uninstallation


    【解决方案1】:

    要在运行时在[Code] 中执行此操作,您可以使用ExtractFileName() 获取文件名和扩展名。我认为您可以通过将空白传递给ChangeFileExt() 函数来删除扩展名,但如果没有,您可以使用Pos()Delete() 等标准字符串操作找到并删除它。

    如果你需要在编译时这样做,你需要使用ISPP,大多数函数具有相同的名称和签名所以使用ExtractFileName()获取文件名本身,RPos()获取句点和@ 987654332@删除它。

    【讨论】:

    • 感谢您的回复。我无法使用 ChangeFileExt() 更改删除文件扩展名,它返回“。”在名称的末尾。可能给我一些删除最后 4 个字符的方法,但我还是给了赞。
    • 我做了,在ISPP中使用RPos()Delete()
    【解决方案2】:

    嗯...我通常通过在我的安装脚本中不使用任何绝对路径来解决这个问题。您也可以像这样定义 ExePath:

    #define BasicName "Serial Data Streaming Recorder"
    #define ExePath   "C:\Projects\Executable\" + BasicName + ".exe"
    

    然后在您只需要名称时使用{#BasicName}

    还有几个预处理器脚本函数(不是 pascalscript)可以进行字符串操作来做更高级的事情。

    【讨论】:

    • #define MyExePath "C:\Executable\Serial Data Streaming Recorder.exe"
      #define MyAppExeName ExtractFileName (MyExePath) #define MyAppName Copy(MyAppExeName, 1, Pos(".exe" , MyAppExeName) - 1) 我这样解决........:)
    猜你喜欢
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    • 2011-01-28
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多