Inno setup 解析相对于另一文件夹中包含的.iss文件的文件路径

Inno setup 解析相对于另一文件夹中包含的.iss文件的文件路径,inno-setup,Inno Setup,我正在使用#include预处理器指令来包含包含驱动程序安装的独立组件的其他.iss文件 [Files] #include "subfolder\issComponent.iss" 和issComponent.iss从其自身的相对路径安装驱动程序 [Files] Source: "Driver\Driver.exe"; DestDir: "{tmp}"; Flags: ignoreversion deleteafterinstall

我正在使用
#include
预处理器指令来包含包含驱动程序安装的独立组件的其他
.iss
文件

[Files]
#include "subfolder\issComponent.iss"
issComponent.iss
从其自身的相对路径安装驱动程序

[Files]
Source: "Driver\Driver.exe"; DestDir: "{tmp}"; Flags: ignoreversion deleteafterinstall

[Run]
Filename: "{tmp}\Driver.exe";
当我尝试构建主/调用脚本时,
Driver.exe
的相对路径不起作用,因为从主/调用脚本的位置引用了相对路径

issComponent.iss
的路径解析为

.\Driver\Driver.exe
而不是

.\subfolder\Driver\Driver.exe
因为include语句直接包含file语句,而不是从自己的路径编译它。这就是导致错误的原因。我想知道是否有一种方法可以正确使用两个位置的相对路径。

预处理器解释
#include
[文件]
(和其他部分)由编译器解释。这些是相互了解的独立组件。就像在C/C++中一样。预处理器将
issComponent.iss
合并到主
.iss
文件中,如下所示:

[Files]
[Files]
Source: "Driver\Driver.exe"; DestDir: "{tmp}"; Flags: ignoreversion deleteafterinstall

[Run]
Filename: "{tmp}\Driver.exe";
编译器甚至不知道这些行原来在不同的文件中,更不用说在不同的文件夹中了


您可以使用一些预处理器功能来实现所需的功能。例如,
\uuu路径文件名
,它解析为引用它的
.iss
文件的路径

#define PathToSelf ExtractFileDir(__PATHFILENAME__)
Source: "{#PathToSelf}\MyProg.exe"; DestDir: "{app}"
这将导致最终的
.iss
脚本,如:

[Files]
[Files]
Source: "C:\full\path\to\subfolder\Driver\Driver.exe"; DestDir: "{tmp}"; Flags: ignoreversion deleteafterinstall

[Run]
Filename: "{tmp}\Driver.exe";
#include
由预处理器解释。
[文件]
(和其他部分)由编译器解释。这些是相互了解的独立组件。就像在C/C++中一样。预处理器将
issComponent.iss
合并到主
.iss
文件中,如下所示:

[Files]
[Files]
Source: "Driver\Driver.exe"; DestDir: "{tmp}"; Flags: ignoreversion deleteafterinstall

[Run]
Filename: "{tmp}\Driver.exe";
编译器甚至不知道这些行原来在不同的文件中,更不用说在不同的文件夹中了


您可以使用一些预处理器功能来实现所需的功能。例如,
\uuu路径文件名
,它解析为引用它的
.iss
文件的路径

#define PathToSelf ExtractFileDir(__PATHFILENAME__)
Source: "{#PathToSelf}\MyProg.exe"; DestDir: "{app}"
这将导致最终的
.iss
脚本,如:

[Files]
[Files]
Source: "C:\full\path\to\subfolder\Driver\Driver.exe"; DestDir: "{tmp}"; Flags: ignoreversion deleteafterinstall

[Run]
Filename: "{tmp}\Driver.exe";

这非常有效,非常感谢您的帮助!这非常有效,非常感谢您的帮助!