相对于另一个文件夹中包含的 .iss 文件解析文件路径
Resolve file paths relatively to a .iss file included from another folder
我正在使用 #include
预处理器指令来包含其他 .iss
文件,这些文件包含我的驱动程序安装的单独组件。
[Files]
#include "subfolder\issComponent.iss"
和issComponent.iss
从其自己的相对路径执行驱动程序安装。
[Files]
Source: "Driver\Driver.exe"; DestDir: "{tmp}"; Flags: ignoreversion deleteafterinstall
[Run]
Filename: "{tmp}\Driver.exe";
当我尝试构建 main/calling 脚本时,Driver.exe
的相对路径不起作用,因为相对路径是从 main/calling 脚本的位置引用的。
路径从 issComponent.iss
解析为
.\Driver\Driver.exe
而不是
.\subfolder\Driver\Driver.exe
因为 include 语句直接包含文件语句,而不是从它自己的路径编译它。这就是导致错误的原因。我想知道是否有办法在两个位置正确使用相对路径。
#include
由预处理器解释。 [Files]
(和其他部分)由编译器解释。这些是相互不了解的独立组件。就像在 C/C++ 中一样。预处理器将 issComponent.iss
合并到主 .iss
文件中,如下所示:
[Files]
[Files]
Source: "Driver\Driver.exe"; DestDir: "{tmp}"; Flags: ignoreversion deleteafterinstall
[Run]
Filename: "{tmp}\Driver.exe";
而且编译器甚至不知道这些行最初在不同的文件中,只知道在不同的文件夹中。
您可以利用一些预处理器功能来实现您想要的。例如 __PATHFILENAME__
predefined variable,它解析为引用它的 .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
预处理器指令来包含其他 .iss
文件,这些文件包含我的驱动程序安装的单独组件。
[Files]
#include "subfolder\issComponent.iss"
和issComponent.iss
从其自己的相对路径执行驱动程序安装。
[Files]
Source: "Driver\Driver.exe"; DestDir: "{tmp}"; Flags: ignoreversion deleteafterinstall
[Run]
Filename: "{tmp}\Driver.exe";
当我尝试构建 main/calling 脚本时,Driver.exe
的相对路径不起作用,因为相对路径是从 main/calling 脚本的位置引用的。
路径从 issComponent.iss
解析为
.\Driver\Driver.exe
而不是
.\subfolder\Driver\Driver.exe
因为 include 语句直接包含文件语句,而不是从它自己的路径编译它。这就是导致错误的原因。我想知道是否有办法在两个位置正确使用相对路径。
#include
由预处理器解释。 [Files]
(和其他部分)由编译器解释。这些是相互不了解的独立组件。就像在 C/C++ 中一样。预处理器将 issComponent.iss
合并到主 .iss
文件中,如下所示:
[Files]
[Files]
Source: "Driver\Driver.exe"; DestDir: "{tmp}"; Flags: ignoreversion deleteafterinstall
[Run]
Filename: "{tmp}\Driver.exe";
而且编译器甚至不知道这些行最初在不同的文件中,只知道在不同的文件夹中。
您可以利用一些预处理器功能来实现您想要的。例如 __PATHFILENAME__
predefined variable,它解析为引用它的 .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";