如果您真的想设置快捷方式的“以管理员身份运行”标志(与强制目标应用程序以管理员权限运行相反),您可以使用以下代码:
[Icons]
Name: "{userdesktop}\My Program"; Filename: "{app}\MyProg.exe"; \
AfterInstall: SetElevationBit('{userdesktop}\My Program.lnk')
[Code]
procedure SetElevationBit(Filename: string);
var
Buffer: string;
Stream: TStream;
begin
Filename := ExpandConstant(Filename);
Log('Setting elevation bit for ' + Filename);
Stream := TFileStream.Create(FileName, fmOpenReadWrite);
try
Stream.Seek(21, soFromBeginning);
SetLength(Buffer, 1);
Stream.ReadBuffer(Buffer, 1);
Buffer[1] := Chr(Ord(Buffer[1]) or $20);
Stream.Seek(-1, soFromCurrent);
Stream.WriteBuffer(Buffer, 1);
finally
Stream.Free;
end;
end;
这是基于:
在 Unicode 版本的 Inno Setup 上测试。但更自然地,它也应该在 Ansi 版本上工作,尽管无论如何你都应该使用 Unicode 版本。
如果您想允许用户在安装结束时使用部分中的postinstall
条目执行程序[Run]
,您当然需要明确请求提升。
如果安装程序以管理员权限运行,您可以简单地添加runascurrentuser
标志:
[Run]
Filename: "{app}\MyProg.exe"; Description: "Launch application"; \
Flags: postinstall nowait skipifsilent runascurrentuser
如果安装程序在没有管理员权限的情况下运行,请将Verb
参数设置为runas
(为此您还需要shellexec
标志):
[Run]
Filename: "{app}\MyProg.exe"; Verb: runas; Description: "Launch application"; \
Flags: postinstall nowait skipifsilent shellexec
不过,请确保您有充分的理由以管理员权限运行您的应用程序。用户应用程序不需要管理员权限。如果他们需要它,这通常是糟糕设计的标志。希望应用程序以管理员权限运行的一个常见(错误)原因是应用程序需要写入其安装文件夹。
请参阅使用 Inno Setup 安装时应用程序不起作用