我想使用下面的脚本
function InitializeSetup(): Boolean;
begin
Result := not IsAdminLoggedOn;
if Result then
begin
检查用户是否是管理员。
但是,如果用户是管理员,我该怎么办,然后在A.txt
中安装C:\program files\ABC
,否则安装在D:\TEST
?
我可以写点什么来连接[Files]
吗?
因为我还想在安装文件时使用检查路径,如果我可以合并[Code]
和[Files]
,那么对我来说可能更容易。
我缺乏知识的借口,并提前感谢。
我试过用这个,
[Files]
Source: "..\ABC\CDE.txt"; DestDir: "{code:GetDirName}\IJK"; \
Check: DirExists(ExpandConstant('C:\Program Files\FGH'))
但我不知道如何编写代码,如果我想在更多路径中安装更多文件。
20170109更新“这个不起作用”
function GetDirName(Param: string): string;
begin
if IsAdminLoggedOn And DirExists(ExpandConstant('C:\ABC')) then
begin
Result := ExpandConstant('C:\ABC\My Program')
end
else
begin
if DirExists(ExpandConstant('C:\DEF')) then
begin
Result := ExpandConstant('C:\DEF\My Other Program');
end
else
begin
MsgBox('No destination found, aborting installation', mbError, MB_OK);
end;
end;
end;
答案 0 :(得分:4)
只需实现GetDirName
scripted constant即可为特权和非特权安装返回不同的路径。
[Files]
Source: "..\ABC\CDE.txt"; DestDir: "{code:GetDirName}"
[Code]
function GetDirName(Param: string): string;
begin
if IsAdminLoggedOn then
Result := ExpandConstant('{pf}\My Program')
else
Result := ExpandConstant('{localappdata}\My Program');
end;
如果要为不同的文件使用不同的文件夹,只需实现更多功能,如GetDirName
。虽然差异只是关于子文件夹,但您当然可以使用一个脚本常量函数来解析公共根文件夹并将子文件夹附加到DestDir
参数中。
如果要更改整体安装目标,请使用DefaultDirName
directive中的GetDirName
脚本常量:
[Setup]
DefaultDirName={code:GetDirName}
[Files]
Source: "..\ABC\CDE.txt"; DestDir: "{app}"
[Code]
{ The same as above }
有关更复杂的示例,请参阅Make Inno Setup installer request privileges elevation only when needed。