Inno 安装程序桌面快捷方式(链接),它设置了"Run as administrator"高级属性



我正在努力让 Inno 设置 (5.5.9u) 创建一个桌面快捷方式,该快捷方式具有图标并设置了"以管理员身份运行">的高级属性。

问题

这个问题与:如何使用Inno Setup在文件上设置"以管理员身份运行">

由于我尝试做的不是在设置时以管理员权限运行程序(安装程序已经在管理员处运行),而是在桌面上留下一个具有"以管理员身份运行">高级属性的链接。

代码示例

[Icons]
Name: "{group}EGPL Watson Uninstall"; Filename: "{uninstallexe}"; 
WorkingDir: "{app}"
Name: "{commondesktop}DashBoard"; 
Filename: "{app}dashboardnode_moduleselectrondistelectron.exe main.js"; 
WorkingDir: "{app}dashboard"; 
IconFilename: "{src}dashboardbuildconfigure.ico"

首先,确保您有充分的理由以管理员权限运行应用程序。用户应用程序不应需要管理员权限。如果他们需要它,这通常是设计不佳的标志。希望应用程序以管理员权限运行的一个常见(坏)原因是应用程序需要写入其安装文件夹。

请参阅使用Inno安装程序安装时应用程序不起作用


Inno 安装程序本身不支持创建设置了"以管理员身份运行">标志的快捷方式。

"以管理员身份运行">标志有点像.lnk文件。看:

  • [MS-SHLLINK] 中的 LinkFlags:Shell Link (.LNK) 二进制文件格式;
  • 如何使用 Powershell 创建"以管理员身份运行"快捷方式
  • 如何使用 JScript 创建使用"以管理员身份运行"的快捷方式

您可以使用以下代码设置位:

[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 上测试(Inno Setup 6 的唯一版本)。但它应该,更自然地,也适用于Ansi版本。

最新更新