如果 Inno Setup 中的权限不是管理员,则将文件安装在不同的文件夹中

Sab*_*Liu 3 installation privileges inno-setup

我想使用如下脚本

function InitializeSetup(): Boolean;
begin
  Result := not IsAdminLoggedOn;
  if Result then
  begin
Run Code Online (Sandbox Code Playgroud)

检查用户是否是管理员。

但是如果用户是管理员,那么我该怎么办,然后安装A.txtC:\program files\ABC,否则安装在D:\TEST

我可以写一些东西来连接[Files]吗?

因为我也想在安装文件时使用检查路径,如果我可以结合起来[Code][Files]对我来说可能会更容易。

请原谅我缺乏知识,并提前致谢。

我试过用这个

[Files]
Source: "..\ABC\CDE.txt"; DestDir: "{code:GetDirName}\IJK"; \
    Check: DirExists(ExpandConstant('C:\Program Files\FGH'))
Run Code Online (Sandbox Code Playgroud)

但如果我想在更多路径中安装更多文件,我不知道如何编写代码。

这个不起作用:

[Files]
Source: "..\ABC\CDE.txt"; DestDir: "{code:GetDirName}\IJK"; \
    Check: DirExists(ExpandConstant('C:\Program Files\FGH'))
Run Code Online (Sandbox Code Playgroud)

Mar*_*ryl 5

只需实现GetDirName脚本常量即可为特权和非特权安装返回不同的路径。

[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;
Run Code Online (Sandbox Code Playgroud)

如果您想对不同的文件使用不同的文件夹,只需实现更多功能,例如GetDirName. 不过,如果差异仅与子文件夹有关,您当然可以使用一个脚本化常量函数来解析公共根文件夹并将子文件夹附加到参数中DestDir


如果要更改总体安装目标,请在指令GetDirName中使用脚本常量:DefaultDirName

[Setup]
DefaultDirName={code:GetDirName}

[Files]
Source: "..\ABC\CDE.txt"; DestDir: "{app}"

[Code]
{ The same as above }
Run Code Online (Sandbox Code Playgroud)

有关更复杂的示例,请参阅使 Inno Setup 安装程序仅在需要时请求权限提升