为什么我们在 Inno Setup 的 ExtractTemporaryFiles 函数中指定路径?
Why do we specify the path in ExtractTemporaryFiles function in Inno Setup?
我一直在阅读 Inno Setup 文档,并且对为什么我们在 ExtractTemporaryFiles
函数中指定路径感到困惑,如果根据文档它 提取与指定的通配符匹配的文件从 [Files]
部分到临时目录的模式。?如果我们在 [Files]
部分中有此 Source: "Readme.txt"; Flags: dontcopy
为什么我们在 [Code]
部分中键入 ExtractTemporaryFiles('{tmp}\Readme.txt')
?这是一个错误还是我只是不明白这个功能是如何工作的?这同样适用于 ExtractTemporaryFile
过程。
这是来自 ExtractTemporyFile
页面的代码:
[Files]
Source: "Readme.txt"; Flags: dontcopy noencryption
[Code]
function InitializeSetup: Boolean;
var
S: AnsiString;
begin
{ Show the contents of Readme.txt (non Unicode) in a message box }
ExtractTemporaryFile('Readme.txt');
if LoadStringFromFile(ExpandConstant('{tmp}\Readme.txt'), S) then
begin
MsgBox(S, mbInformation, MB_OK);
end;
Result := True;
end;
这是来自 ExtractTemporaryFiles
页的代码:
[Files]
Source: "Readme.txt"; Flags: dontcopy
Source: "MyProg.exe"; DestDir: "{app}"
Source: "MyProg.chm"; DestDir: "{app}"
[Code]
function InitializeSetup: Boolean;
var
S: AnsiString;
ResultCode: Integer;
begin
{ Show the contents of Readme.txt (non Unicode) in a message box }
ExtractTemporaryFiles('{tmp}\Readme.txt');
if LoadStringFromFile(ExpandConstant('{tmp}\Readme.txt'), S) then
begin
MsgBox(S, mbInformation, MB_OK);
end;
{ Extract all MyProg files and launch it. Note how {app} is left unexpanded. }
ExtractTemporaryFiles('{app}\MyProg.*');
ExecAsOriginalUser(ExpandConstant('{tmp}\')+'{app}\MyProg.exe', '', '',
SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
Result := True;
end;
在第一种情况下我们有:
[Files]
Source: "Readme.txt"; Flags: dontcopy noencryption
[Code]
ExtractTemporaryFile('Readme.txt');
在第二个中我们有:
[Files]
Source: "Readme.txt"; Flags: dontcopy
[Code]
ExtractTemporaryFiles('{tmp}\Readme.txt');
这两者有什么区别? (noencryption
标志不算)
如果我们已经从那里提取,为什么我们需要在第二种情况下指定 {tmp}
常量?为了能够正确使用这些方法,我需要清楚地理解语法。
你问题的具体答案:
Why do we type ExtractTemporaryFiles('{tmp}\Readme.txt')
in the [Code]
section?
ExtractTemporaryFiles
示例代码中的 {tmp}
引用显然是 ExtractTemporaryFiles
函数所必需的,尽管这没有记录。 {tmp}
引用不存在于 documentation sample code for the ExtractTemporaryFile
procedure:
[Files]
Source: "Readme.txt"; Flags: dontcopy noencryption
[Code]
function InitializeSetup: Boolean;
var
S: AnsiString;
begin
// Show the contents of Readme.txt (non Unicode) in a message box
ExtractTemporaryFile('Readme.txt');
if LoadStringFromFile(ExpandConstant('{tmp}\Readme.txt'), S) then
begin
MsgBox(S, mbInformation, MB_OK);
end;
Result := True;
end;
我能看到 ExtractTemporaryFile
和 ExtractTemporaryFiles
之间的唯一区别是:
ExtractTemporaryFile
只提取一个文件,没有return值
ExtractTemporaryFiles
根据通配符提取文件名,returns 类型 integer
(提取的文件数),显然需要目录名前缀消除正在提取的文件名的歧义(尽管没有记录)
使用ExtractTemporaryFiles
(与ExtractTemporaryFile
相反),需要使用DestDir
参数的完整值(除了文件名)来select文件的正确副本,以防安装程序中有多个同名文件。相反,ExtractTemporaryFile
将始终提取具有给定名称的第一个文件。
所以有了这个:
[Files]
Source: "one\readme.txt"; DestDir: "{app}\one"
Source: "two\readme.txt"; DestDir: "{app}\two"
Source: "three\readme.txt"; Flags: dontcopy
- 要提取
one\readme.txt
,请使用:ExtractTemporaryFiles('{app}\one\readme.txt')
- 要提取
two\readme.txt
,请使用:ExtractTemporaryFiles('{app}\two\readme.txt')
- 要提取
three\readme.txt
,请使用:ExtractTemporaryFiles('{tmp}\readme.txt')
(Flags: dontcopy
出于某种原因暗示 DestDir: {tmp}
)
我一直在阅读 Inno Setup 文档,并且对为什么我们在 ExtractTemporaryFiles
函数中指定路径感到困惑,如果根据文档它 提取与指定的通配符匹配的文件从 [Files]
部分到临时目录的模式。?如果我们在 [Files]
部分中有此 Source: "Readme.txt"; Flags: dontcopy
为什么我们在 [Code]
部分中键入 ExtractTemporaryFiles('{tmp}\Readme.txt')
?这是一个错误还是我只是不明白这个功能是如何工作的?这同样适用于 ExtractTemporaryFile
过程。
这是来自 ExtractTemporyFile
页面的代码:
[Files]
Source: "Readme.txt"; Flags: dontcopy noencryption
[Code]
function InitializeSetup: Boolean;
var
S: AnsiString;
begin
{ Show the contents of Readme.txt (non Unicode) in a message box }
ExtractTemporaryFile('Readme.txt');
if LoadStringFromFile(ExpandConstant('{tmp}\Readme.txt'), S) then
begin
MsgBox(S, mbInformation, MB_OK);
end;
Result := True;
end;
这是来自 ExtractTemporaryFiles
页的代码:
[Files]
Source: "Readme.txt"; Flags: dontcopy
Source: "MyProg.exe"; DestDir: "{app}"
Source: "MyProg.chm"; DestDir: "{app}"
[Code]
function InitializeSetup: Boolean;
var
S: AnsiString;
ResultCode: Integer;
begin
{ Show the contents of Readme.txt (non Unicode) in a message box }
ExtractTemporaryFiles('{tmp}\Readme.txt');
if LoadStringFromFile(ExpandConstant('{tmp}\Readme.txt'), S) then
begin
MsgBox(S, mbInformation, MB_OK);
end;
{ Extract all MyProg files and launch it. Note how {app} is left unexpanded. }
ExtractTemporaryFiles('{app}\MyProg.*');
ExecAsOriginalUser(ExpandConstant('{tmp}\')+'{app}\MyProg.exe', '', '',
SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
Result := True;
end;
在第一种情况下我们有:
[Files]
Source: "Readme.txt"; Flags: dontcopy noencryption
[Code]
ExtractTemporaryFile('Readme.txt');
在第二个中我们有:
[Files]
Source: "Readme.txt"; Flags: dontcopy
[Code]
ExtractTemporaryFiles('{tmp}\Readme.txt');
这两者有什么区别? (noencryption
标志不算)
如果我们已经从那里提取,为什么我们需要在第二种情况下指定 {tmp}
常量?为了能够正确使用这些方法,我需要清楚地理解语法。
你问题的具体答案:
Why do we type
ExtractTemporaryFiles('{tmp}\Readme.txt')
in the[Code]
section?
ExtractTemporaryFiles
示例代码中的 {tmp}
引用显然是 ExtractTemporaryFiles
函数所必需的,尽管这没有记录。 {tmp}
引用不存在于 documentation sample code for the ExtractTemporaryFile
procedure:
[Files]
Source: "Readme.txt"; Flags: dontcopy noencryption
[Code]
function InitializeSetup: Boolean;
var
S: AnsiString;
begin
// Show the contents of Readme.txt (non Unicode) in a message box
ExtractTemporaryFile('Readme.txt');
if LoadStringFromFile(ExpandConstant('{tmp}\Readme.txt'), S) then
begin
MsgBox(S, mbInformation, MB_OK);
end;
Result := True;
end;
我能看到 ExtractTemporaryFile
和 ExtractTemporaryFiles
之间的唯一区别是:
ExtractTemporaryFile
只提取一个文件,没有return值ExtractTemporaryFiles
根据通配符提取文件名,returns 类型integer
(提取的文件数),显然需要目录名前缀消除正在提取的文件名的歧义(尽管没有记录)
使用ExtractTemporaryFiles
(与ExtractTemporaryFile
相反),需要使用DestDir
参数的完整值(除了文件名)来select文件的正确副本,以防安装程序中有多个同名文件。相反,ExtractTemporaryFile
将始终提取具有给定名称的第一个文件。
所以有了这个:
[Files]
Source: "one\readme.txt"; DestDir: "{app}\one"
Source: "two\readme.txt"; DestDir: "{app}\two"
Source: "three\readme.txt"; Flags: dontcopy
- 要提取
one\readme.txt
,请使用:ExtractTemporaryFiles('{app}\one\readme.txt')
- 要提取
two\readme.txt
,请使用:ExtractTemporaryFiles('{app}\two\readme.txt')
- 要提取
three\readme.txt
,请使用:ExtractTemporaryFiles('{tmp}\readme.txt')
(Flags: dontcopy
出于某种原因暗示DestDir: {tmp}
)