如果权限不是管理员,Inno Setup 将文件安装在不同的文件夹中
Inno Setup install files in different folder if the privileges is not administrator
我想使用如下脚本
function InitializeSetup(): Boolean;
begin
Result := not IsAdminLoggedOn;
if Result then
begin
检查用户是否是管理员。
但是如果用户是管理员怎么办,然后在C:\program files\ABC
中安装A.txt
,否则在D:\TEST
中安装?
我可以写点东西连接到 [Files]
吗?
因为我也想在安装文件时使用检查路径,如果我可以结合[Code]
和[Files]
可能对我来说更容易。
知识匮乏请见谅,先谢谢了。
我试过用这个,
[Files]
Source: "..\ABC\CDE.txt"; DestDir: "{code:GetDirName}\IJK"; \
Check: DirExists(ExpandConstant('C:\Program Files\FGH'))
但是我不知道怎么写代码,如果我想在更多的路径下安装更多的文件。
20170109更新"this one doesn't work"
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;
只需实施 GetDirName
scripted constant 到 return 特权和非特权安装的不同路径。
[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。
我想使用如下脚本
function InitializeSetup(): Boolean;
begin
Result := not IsAdminLoggedOn;
if Result then
begin
检查用户是否是管理员。
但是如果用户是管理员怎么办,然后在C:\program files\ABC
中安装A.txt
,否则在D:\TEST
中安装?
我可以写点东西连接到 [Files]
吗?
因为我也想在安装文件时使用检查路径,如果我可以结合[Code]
和[Files]
可能对我来说更容易。
知识匮乏请见谅,先谢谢了。
我试过用这个,
[Files]
Source: "..\ABC\CDE.txt"; DestDir: "{code:GetDirName}\IJK"; \
Check: DirExists(ExpandConstant('C:\Program Files\FGH'))
但是我不知道怎么写代码,如果我想在更多的路径下安装更多的文件。
20170109更新"this one doesn't work"
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;
只需实施 GetDirName
scripted constant 到 return 特权和非特权安装的不同路径。
[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。