【问题标题】:Using constants in source file names in Inno Setup在 Inno Setup 的源文件名中使用常量
【发布时间】:2014-01-20 10:49:37
【问题描述】:

我想在 Inno Setup 安装中包含来自 program files\my org\my app 的文件。该文件实际上位于 c:\program files (x86)\my org\my app 但我希望能够在 32 位和 64 位版本的 Windows 上编译设置,所以我想使用一个常量作为源文件名:

[Files]
Source: "{pf}\my org\my app\myapp.exe"; DestDir: "{app}"

Inno 安装程序只是按字面意思处理 {pf},我收到一条消息说它找不到文件“{pf}\my org\my app\myapp.exe”

在帮助中,如果使用了外部标志,则只能对源文件使用常量,但这仅适用于目标系统上已经存在的文件。

还有另一个类似的问题表明您可以在源文件名中使用常量,但我无法让它工作:

How to use parent of a directory in a Source parameter of the Files section?

我也试过设置:

[Setup]
SourceDir={pf}\my org\my app 

但编译器再次将 {pf} 视为文字而不是替换它,这与替换常量的 DefaultDirName 不同。

我正在使用 Inno Setup 版本 5.5.3 (a)。

有什么想法吗?

【问题讨论】:

  • {pf} 常量在运行时扩展,而不是在编译时扩展,因此您对这种方法不走运。预处理器只为 Windows 文件夹声明了变量,但是,您可以从注册表中的某处读取 Program Files 的路径,这太疯狂了。如果我是你,我会创建一个子文件夹,例如Deploy 并在那里放置了安装脚本。然后,您可以使用相对路径访问您的文件,这比希望它们位于某个 P​​rogram Files 文件夹中要好得多。此外,Program Files 文件夹不是部署的好文件夹...
  • 好的 - 这很有意义。链接的示例使用 {src} 常量作为源文件名的一部分,但我猜 {src} 常量将在编译时可用。谢谢
  • 嗯,它在编译时被扩展,但它不能用于Source 参数或SourceDir 指令。例如 Source 参数值必须在预处理之后(编译开始之前)知道,如果你不指定 external 标志。简而言之,除了使用预处理器之外,你不能做任何你想做的事情。
  • 我会按照您的建议将所有内容放在一个单独的文件夹中。再次感谢

标签: constants inno-setup


【解决方案1】:

您可以为此使用预处理器。它没有所有有用的目录常量,但它可以从环境变量中读取,这也为您提供了大多数系统路径名。在您的示例中:

[Setup]
#define ProgramFiles GetEnv("ProgramFiles")
SourceDir={#ProgramFiles}\my org\my app

特别注意程序文件目录的位数。 AppData 等其他目录问题较少。

【讨论】:

  • @Royi 为我工作。您一定有其他错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
  • 2014-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多